0

我在 aContextMenu上有一个DataGrid,我想MenuItem根据右键单击的网格中的项目将 a 标记为选中或未选中。

因此,我将 'IsChecked' 属性绑定MenuItem到我的 ViewModel 上的一个属性,并且我的 VM 根据右键单击的项目将此属性设置为 true 或 false。

但是,事实证明我的ContextMenuItem 的“IsChecked”属性只被评估一次。每次我右键单击一个项目时都不会对其进行评估。

对于所有后续的右键单击,将保留第一次执行的评估。

不会触发属性“IsCheckedonVM”的 getter。

<MenuItem Command= IsCheckable="True"
                   IsChecked="{Binding IsCheckedonVM}"
                   Header = ".."
    </MenuItem>

在虚拟机中:

public bool IsCheckedonVM
{
get
{ 
  return selectedItem.IsChecked;
}
set
{
  selecteditem.IsChecked = value;
  OnPropertyChanged("IsCheckedonVM");
}

如何在每次右键单击时对我的属性进行评估,以便每次都获取该IsChecked属性?MenuItemIsCheckedonVM

4

1 回答 1

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
});
于 2013-10-14T09:42:17.210 回答