我在ContextMenu
上有DataGrid
,我想将MenuItem
标记为已选中或未选中,具体取决于右键单击网格中的项目。
因此,我将MenuItem
上的'IsChecked'属性绑定到我的ViewModel上的属性,并且我的VM根据右键单击的项将此属性设置为true或false。
然而,事实证明我的ContextMenu
项的'IsChecked'属性仅被评估一次。每次我右键单击一个项目时都不会对它进行评估。
对于所有后续的右键单击,将保留第一次执行的评估。
属性'IsCheckedonVM'的getter未被触发。
<MenuItem Command= IsCheckable="True"
IsChecked="{Binding IsCheckedonVM}"
Header = ".."
</MenuItem>
VM中的:
public bool IsCheckedonVM
{
get
{
return selectedItem.IsChecked;
}
set
{
selecteditem.IsChecked = value;
OnPropertyChanged("IsCheckedonVM");
}
每次正确点击IsChecked
时,如何评估我MenuItem
上的IsCheckedonVM
属性,以便每次都提取{{1}}?
答案 0 :(得分:0)
您可以尝试将命令绑定到DataGrid
的右键单击事件并执行专用逻辑,以根据网格的IsCheckedonVM
确定SelectedItem
值
示例(使用Prism框架):
<DataGrid x:Name="myGrid" ItemsSource="{Binding SomeCollection}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseRightButtonDown">
<i:InvokeCommandAction Command="{Binding DetermineIsCheckedCommand}" CommandParameter="{Binding ElementName=myGrid, Path=SelectedItem}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
并且在命令中:
DetermineIsCheckedCommand = new DelegateCommand<object>(selectedItem =>
{
// Do logic and set IsCheckedonVM accordingly
});