我在DataGrid上有一个ContextMenu,我想根据右键单击网格中的项将MenuItem标记为选中或未选中。
因此,我将MenuItem上的'IsChecked‘属性绑定到我的ViewModel上的一个属性,这个属性由我的VM根据右键单击的项设置为true或false。
然而,事实证明,我的ContextMenu项的'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");
}如何让我的MenuItem上的IsChecked属性在每次右键单击时都被计算,这样每次都会获取IsCheckedonVM?
发布于 2013-10-14 17:42:17
您可以尝试将命令绑定到DataGrid的右键单击事件并执行专用逻辑,以基于网格的SelectedItem确定IsCheckedonVM值。
示例(使用棱镜框架):
<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
});https://stackoverflow.com/questions/19357019
复制相似问题