2009-09-02 12 views
1

XAML MenuItem DataBound ItemsSourceがありますが、問題はありません。 MenuItemを表示し、データバインドされた項目がない場合、ParentMenuは無効になり、バインディングエラーなしで正常に表示されます(ItemsSourceが空であると予想されます)。 ObservableCollectionが変更され、項目が追加されると、バインディングがリフレッシュされ、MenuItemが表示されます。ただし、ItemContainerStyleは、MenuItem.Tagプロパティをdatabound値にアップデートしません。Strange XAML MenuItem DataBound ItemsSource空のItemsSourceの後での更新の問題

ItemsSourceが空で始まらない、または空になることがない限り、MenuItemは正常に機能します。誰もそのような問題のためのヒントを持っていますか?ただの推測

<MenuItem x:Name="MenuItem" Header="Menu" ItemsSource="{Binding Source={StaticResource MenuItemViewSource}}" ItemTemplate="{StaticResource MenuDataTemplate}"> 
    <MenuItem.ItemContainerStyle> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Setter Property="Tag" Value="{Binding Path=ID, Source={StaticResource MenuItemViewSource}}"/> 
      <Setter Property="Background" Value="Red"/> 
      <Setter Property="Opacity" Value="0.5"/> 
      <EventSetter Event="Click" Handler="MenuItem_Click"/> 
     </Style> 
    </MenuItem.ItemContainerStyle> 
    <MenuItem.Style> 
     <Style TargetType="{x:Type MenuItem}"> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Path=Items.Count, RelativeSource={RelativeSource Self}}" Value="0"> 
        <Setter Property="IsEnabled" Value="False"/> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </MenuItem.Style> 
</MenuItem> 

答えて

0

、しかし、あなたはのIDに結合しようとしている:私は空

XAMLを以下に示しているのItemsSourceが起動してものItemsSourceとItemContainerStyleが常に正しく更新されているしたいと思いますバインディングのデータソースをビューソースに設定せずに基礎となるデータを取得するこのように:

<Setter Property="Tag" Value="{Binding ID}"/> 

スタイルの中にそのように結合することのMenuItemが表す項目であるのMenuItem自体ののDataContextにバインドする必要があります。あなたが行っているようにビューソースに戻ってくると、それを混乱させるかもしれません。

+0

ItemsSourceが設定されているMenuItemにDataContextを設定する必要はありますか? – Luke

+0

いいえ、DataContextは、「親」メニュー項目のItemsSourceバインディングの各「子」メニュー項目に到達します。 –

関連する問題