您不能在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