ContextMenu を含む treeView があります。
ContextMenu アイテムの 1 つは、「アイテムの追加」メニュー アイテムです。このアイテムは、アイテムの子リストとして保持する必要があり、このリストはいくつかの ObervableColcetion にバインドされます。各モデルには「Header」と「IsEnabled」があります。リスト内の各項目が新しい MenuItem として追加されます。
私の問題は、初めて、すべての項目が適切な IsEnabled 値を取得することです。一部のモデル データを変更しても、meneItem の可視性は変わりません。ObervableCollcetion は他のビューでも使用しており、正常に動作しているため、バグはないと確信しています。
コードは次のとおりです。
<TreeView Name="tvSceneTree" ItemsSource="{Binding Converter={StaticResource mlControlSceneTreeVMConverter}}"
Height="auto" AllowDrop="True" SelectedItemChanged="tvSceneTree_SelectedItemChanged">
<TreeView.ContextMenu>
<ContextMenu Name="mainContextMenu" Opened="mainContextMenu_Opened">
<MenuItem Header="Add Item" Name="addItemMenu" ItemsSource="{Binding Path=ControlBoxItems}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem Header="{Binding ControlName}" IsEnabled ="{Binding IsEnabled}"
Command="{Binding Source={x:Static ev:ApplicationCommands.AddControlToScene}}" CommandParameter="{Binding}"/>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
<MenuItem Header="Copy" Command="{Binding Source={x:Static ev:ApplicationCommands.Copy}}" />
<MenuItem Header="Paste" Command="{Binding Source={x:Static ev:ApplicationCommands.Paste}}" />
<MenuItem Header="Cut" Command="{Binding Source={x:Static ev:ApplicationCommands.Cut}}" />
<MenuItem Header="Duplicate" IsEnabled="{Binding Path=ControlItem, Converter={StaticResource canDoActionOnControlConverter}, ConverterParameter=CanBeDuplicated}" Command="{Binding Source={x:Static ev:ApplicationCommands.DuplicateControl}}" CommandParameter="{Binding}" />
<MenuItem Header="Delete" IsEnabled="{Binding Path=ControlItem, Converter={StaticResource canDoActionOnControlConverter}, ConverterParameter=CanBeRemove}" Command="{Binding Source={x:Static ev:ApplicationCommands.DeleteControl}}" CommandParameter="{Binding}" />
<MenuItem Header="Add animation" IsEnabled="{Binding Path=ControlItem.AnimationStubs,Converter={StaticResource collectionCountToBoolConverter}}" Command="{Binding Source={x:Static ev:ApplicationCommands.AddAnimation}}" CommandParameter="{Binding}" />
<!--<MenuItem Header="Rename" Command="{Binding Source={x:Static ev:ApplicationCommands.RenameControl}}" CommandParameter="{Binding}" />-->
</ContextMenu>
</TreeView.ContextMenu>