我在ContextMenu
中有一个ResourceDictionary
。 ContextMenu
应隐藏或显示,具体取决于视图模型属性的值,但它不起作用。
这是我的 XAML 代码(ControlBase
来自UserControl
):
<control1:ControlBase>
<UserControl.Resources>
<ResourceDictionary>
<HierarchicalDataTemplate ItemsSource="{Binding InfraNetworkItems}">
<StackPanel>
<StackPanel.ContextMenu>
<ContextMenu DataContext="{Binding PlacementTarget.DataContext,
RelativeSource={RelativeSource Self}}">
<MenuItem Header="Delete"
Visibility="{Binding
DataContext.MyViewModel.DeleteEnabled,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType=control1:ControlBase},
Converter={StaticResource
BooleanVisibilityConverter}}" />
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</HierarchicalDataTemplate>
</ResourceDictionary>
</UserControl.Resources>
</control1:ControlBase>
DeleteEnabled
是视图模型上的bool
属性。
我之前尝试解决问题的依据是这些假设:
ContextMenu
位于HierarchicalDataTemplate
内,ItemsSource
设置ItemSource
。我的属性不是此Visibility="{Binding DataContext.MyViewModel.DeleteEnabled,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=control1:ControlBase},
Converter={StaticResource BooleanVisibilityConverter}}"
的成员,它属于视图模型。因此,我尝试过这行代码,但没有任何影响:
DeleteEnabled
但是如果我将ItemSource
属性从视图模型复制到Visibility="{Binding DeleteEnabled, Converter={StaticResource BooleanVisibilityConverter}}"
对象,它可以工作:
{{1}}
答案 0 :(得分:1)
您的视图的DataContext是什么?如果它是MyViewModel的一个实例,则必须更改Binding的路径。 请尝试这个:
<Visibility="{Binding DataContext.DeleteEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=control1:ControlBase}, Converter={StaticResource BooleanVisibilityConverter}}" />
通过设置DataContext的路径,您已经可以访问viewmodel,当然还可以访问DeleteEnabled-Property。 希望这可以帮助。