ResourceDictionary 中的绑定不起作用
Binding in ResourceDictionary not working
我在 ResourceDictionary
中有一个 ContextMenu
。 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
的成员,它属于 view-model。因此我尝试了这行代码,但没有任何效果:
Visibility="{Binding DataContext.MyViewModel.DeleteEnabled,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=control1:ControlBase},
Converter={StaticResource BooleanVisibilityConverter}}"
但是如果我将 DeleteEnabled
属性 从视图模型复制到 ItemSource
对象,它会起作用:
Visibility="{Binding DeleteEnabled, Converter={StaticResource BooleanVisibilityConverter}}"
您的视图的 DataContext 是什么?如果它是 MyViewModel 的实例,则必须更改绑定的路径。
请试试这个:
<Visibility="{Binding DataContext.DeleteEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=control1:ControlBase}, Converter={StaticResource BooleanVisibilityConverter}}" />
通过设置 DataContext 的路径,您已经可以访问您的视图模型,当然也可以访问 DeleteEnabled-属性。
希望这可以帮助。
我在 ResourceDictionary
中有一个 ContextMenu
。 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
的成员,它属于 view-model。因此我尝试了这行代码,但没有任何效果:
Visibility="{Binding DataContext.MyViewModel.DeleteEnabled,
RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=control1:ControlBase},
Converter={StaticResource BooleanVisibilityConverter}}"
但是如果我将 DeleteEnabled
属性 从视图模型复制到 ItemSource
对象,它会起作用:
Visibility="{Binding DeleteEnabled, Converter={StaticResource BooleanVisibilityConverter}}"
您的视图的 DataContext 是什么?如果它是 MyViewModel 的实例,则必须更改绑定的路径。 请试试这个:
<Visibility="{Binding DataContext.DeleteEnabled, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=control1:ControlBase}, Converter={StaticResource BooleanVisibilityConverter}}" />
通过设置 DataContext 的路径,您已经可以访问您的视图模型,当然也可以访问 DeleteEnabled-属性。 希望这可以帮助。