首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新计算MenuItem.IsChecked

重新计算MenuItem.IsChecked
EN

Stack Overflow用户
提问于 2013-10-14 17:18:23
回答 1查看 220关注 0票数 0

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

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

然而,事实证明,我的ContextMenu项的'IsChecked‘属性只计算一次。并不是每次我右键单击一个项目时都会对其进行评估。

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

属性'IsCheckedonVM‘的getter未激发。

代码语言:javascript
复制
<MenuItem Command= IsCheckable="True"
                   IsChecked="{Binding IsCheckedonVM}"
                   Header = ".."
    </MenuItem>

在虚拟机中:

代码语言:javascript
复制
public bool IsCheckedonVM
{
get
{ 
  return selectedItem.IsChecked;
}
set
{
  selecteditem.IsChecked = value;
  OnPropertyChanged("IsCheckedonVM");
}

如何让我的MenuItem上的IsChecked属性在每次右键单击时都被计算,这样每次都会获取IsCheckedonVM

EN

回答 1

Stack Overflow用户

发布于 2013-10-14 17:42:17

您可以尝试将命令绑定到DataGrid的右键单击事件并执行专用逻辑,以基于网格的SelectedItem确定IsCheckedonVM值。

示例(使用棱镜框架):

代码语言:javascript
复制
    <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>

在命令中:

代码语言:javascript
复制
DetermineIsCheckedCommand = new DelegateCommand<object>(selectedItem =>
{
    // Do logic and set IsCheckedonVM accordingly
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19357019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档