ResourceDictionary 中的绑定不起作用

Binding in ResourceDictionary not working

我在 ResourceDictionary 中有一个 ContextMenuContextMenu 应该根据视图模型 属性 的值隐藏或显示,但它不起作用。

这是我的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-属性。 希望这可以帮助。