绑定ContextMenu项

时间:2012-04-29 07:46:21

标签: wpf binding

我有一个带有一些ContextMenu的treeView。

其中一个ContextMenu项是“添加项”菜单项。这个项目sholud作为子项列表保存,其中此列表绑定到某个ObervableCollcetion。 每个模型都有“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>

0 个答案:

没有答案