重新计算MenuItem.IsChecked

时间:2013-10-14 09:18:23

标签: wpf binding menuitem ischecked

我在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}}?

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
});