【问题标题】:recalculate MenuItem.IsChecked重新计算 MenuItem.IsChecked
【发布时间】:2013-10-14 17:42:17
【问题描述】:

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

【问题讨论】:

  • 尝试根据网格的SelectedItem 将命令绑定到您的 DataGrids right click event and executed dedicated logic to determine IsCheckedonVM` 值...

标签: wpf binding menuitem ischecked


【解决方案1】:

您可以尝试将命令绑定到您的DataGrids 右键单击​​事件并执行专用逻辑以根据网格的SelectedItem 确定IsCheckedonVM

示例(使用 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
});

【讨论】:

  • 我实际上想在网格的上下文菜单中显示右键单击项目的属性是选中还是未选中。不能取消上下文菜单选项。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-28
  • 2011-10-15
  • 2012-11-24
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多