【问题标题】:Interaction Trigger Command WPF MVVM not triggering交互触发命令 WPF MVVM 未触发
【发布时间】:2019-04-05 20:30:36
【问题描述】:

我正在尝试为 RadGridView 的列标题中存在的 checkbox 绑定如下所示的 command

<telerik:GridViewCheckBoxColumn DataMemberBinding="{Binding IsSelected, Mode=TwoWay}" Width="85" AutoSelectOnEdit="True" EditTriggers="CellClick">                                                
  <telerik:GridViewCheckBoxColumn.Header>
     <CheckBox Command="{Binding ShowAllInDTCClickedCommand}" Content="Sh">
         <i:Interaction.Triggers>
              <i:EventTrigger EventName="Checked">                                                                
                  <i:InvokeCommandAction Command="{Binding ShowAllInDTCCheckedCommand}"/>
              </i:EventTrigger>
              <i:EventTrigger EventName="Unchecked">                                                                
                  <i:InvokeCommandAction Command="{Binding ShowAllInDTCUncheckedCommand}"/>
              </i:EventTrigger>
         </i:Interaction.Triggers>
      </CheckBox>
   </telerik:GridViewCheckBoxColumn.Header>
</telerik:GridViewCheckBoxColumn>

并尝试在 ViewModel实现它们,如下所示。

    public DelegateCommand ShowAllInDTClickedCommand { get; set; }
    public DelegateCommand ShowAllInDTCCheckedCommand { get; set; }
    public DelegateCommand ShowAllInDTCUncheckedCommand { get; set; }


    ShowAllInDTClickedCommand = new DelegateCommand(ShowAllInDTClicked);
    ShowAllInDTCCheckedCommand = new DelegateCommand(ShowAllInDTCChecked);
    ShowAllInDTCUncheckedCommand = new DelegateCommand(ShowAllInDTCUnchecked);

    private void ShowAllInDTClicked()
    {
        //Do Something
    }

    private void ShowAllInDTCChecked()
    {
        //Do Something
    }

    private void ShowAllInDTCUnchecked()
    {
        //Do Something
    }                  

但是这些命令没有执行,即代码根本无法访问。 我错过了什么?

【问题讨论】:

  • 基本上,我正在尝试检查该列的属性以查找网格中存在的所有记录。类似“全选”、“取消全选”...
  • 您是否将网格绑定到模型?
  • 是的,我可以填充对象,其他一切正常。除了这些命令...
  • 从您的 cmets 到 mm8 来看,您的交互触发器似乎存在问题。也许试试这个 stackoverflow.com/questions/5566050/… 似乎你想要的只是找出复选框的状态并相应地执行代码,所以只需传递该 CommandParameter 就可以为你提供该信息。
  • 你在哪里进行分配 ShowAllInDTClickedCommand = new DelegateCommand(ShowAllInDTClicked);在构造函数中还是在其他地方?

标签: c# wpf mvvm telerik telerik-grid


【解决方案1】:

如果在您的视图模型中定义了 DelegateCommand 属性,您应该像这样绑定到它们:

<i:EventTrigger EventName="Checked">
    <i:InvokeCommandAction Command="{Binding DataContext.ShowAllInDTCCheckedCommand, 
                                RelativeSource={RelativeSource AncestorType=telerik:RadGridView}}"/>
</i:EventTrigger>

【讨论】:

  • 感谢您的回答。我修改了与您提到的相同的代码。但是,它不起作用。
  • 那么你的命令是在哪里定义的,你的 RadGridView 的 DataContext 是什么?
  • 我在 ViewModel 中定义的命令。我可以使用相同的 ViewModel 触发绑定在此 XAML 中的其他命令
  • 你没有回答我的问题...GridView的DataContext是什么? GridView 的 ItemsSource 是什么?以及命令的类型是什么?
  • Datacontext 是 ViewModel。其他有效的命令是按钮命令。
猜你喜欢
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 2016-10-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 2014-05-02
相关资源
最近更新 更多