MVVM如何将命令绑定到ContextMenu

我对使用relativeSource和ancestorLevel感到完全困惑。 相对源用于从其他元素获取源。但是要成功做到这一点,您必须计算该元素的级别。 (如何调试?)这是WPF中最令人困惑的部分。

在我的示例中,我有上下文菜单,我想绑定数据源然后命令。如何绑定才能在我的vm中获取命令?谢谢

Appcomonent.ts
Appcompontent.html
Appcomponent.css
Appmodule.ts
DesignComponent.ts
Designcomponent.html
Designcomponent1
Designcomponent2

sousou0263 回答:MVVM如何将命令绑定到ContextMenu

您不能在ContextMenu中使用RelativeSource,因为菜单不是可视树的一部分。但是,可以通过使用“绑定源”和x:Reference来避免这种情况。

我认为您的ViewModel看起来像这样

public class UserViewModel
{
    public string Header { get; set; }
    public ICommand MyCommand { get; }
    ... more code
}

现在,让我们绑定VM的Header和MyCommand属性

<ContextMenu x:Key="ContextMenu">
    <ContextMenu.Items>
        <MenuItem Header="{Binding Header,Source={x:Reference vm}}"
                  Command="{Binding MyCommand,Source={x:Reference vm}}"/>
    </ContextMenu.Items>
</ContextMenu>

重要的部分是将ViewModel放置在可视树中的某个位置并设置其x:Name,就像您在示例中所做的一样

<Page.DataContext>
    <PDB:UsersViewModel x:Name="vm"/>
</Page.DataContext>

如果您仍然想了解有关RelativeSource的更多信息,那么这个question似乎和您有同样的问题。基本上,绑定的路径必须为DataContext.MyViewModelProperty,绑定的RelativeSource必须为and元素,且DataContext设置为ViewModel。

本文链接:https://www.f2er.com/3102158.html

大家都在问