如何在WPF/MVVM中获取复选框网格的更改事件?

3
我有一个数据集,它基本上是一个对象列表,其中包含一个绑定到DataGrid(具体来说是DXGrid)的布尔属性。我正在尝试在单击复选框时使IsChecked属性填充。在独立文本框的情况下,我会使用Binding的UpdateSourceTrigger选项,但至少在DXGrid中似乎没有这个选项。目前,我必须失去复选框的焦点才能更新属性。
有什么想法吗?
假设下面的RaisePropertyChanged函数是INotifyPropertyChanged的实现。
数据对象
public class MyObject
{
  bool _isChecked;
  string _name;
  int _id;

  public MyObject(OtherObject oo)
  {
       _name = oo.Name;
       _id = oo.ID;
  }

  public int ID
  { get { return _id; }}

  public string Name
  { get { return _name; }}

  public bool IsChecked
  {
      get { return _isChecked; }
      set
      {
          if (value == _isChecked)
              return;
          _isChecked = value;
          RaisePropertyChanged("IsChecked");
      }
  }
}    

视图模型

class MyTestViewModel : BaseViewModel
{
    #region Fields
    #endregion

    public MyTestViewModel(Message message)
        : base(message)
    {
        AvailableObjects = PopulateDataSet();
    }

    #region Properties
    public List<MyObject> AvailableObjects { get; set; }
}

查看XAML

  <dxg:GridControl x:Name="SearchGrid" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" MaxHeight="1024" AutoPopulateColumns="True" DataSource="{Binding Path=AvailableObjects}" >
      <dxg:GridControl.Columns>
          <dxg:GridColumn Header="Select" Width="60" FixedWidth="True" FieldName="IsChecked" ImmediateUpdateColumnFilter="True"></dxg:GridColumn>
          <dxg:GridColumn Header="ID Number" Width="130" FixedWidth="True" ReadOnly="True"  FieldName="ID"></dxg:GridColumn>
          <dxg:GridColumn Header="Name"  FieldName="Name" ReadOnly="True"></dxg:GridColumn>
      </dxg:GridControl.Columns>
      <dxg:GridControl.View>
          <dxg:TableView AllowEditing="True" x:Name="view" IndicatorWidth="0" AutoWidth="True"/>
      </dxg:GridControl.View>
  </dxg:GridControl>

如果您正在使用带有DataGridCheckBoxColumn的WPF内置DataGrid,则可以使用Mode = TwoWay将列绑定到IsChecked属性。但是,我不确定如何在DXGrid中实现这一点。 - Dan J
我可以在网格中添加一个未绑定的复选框(实际上我之前尝试过,效果不一)。假设我这样做,绑定路径将是什么?{Binding Path=IsChecked, Mode=TwoWay} 似乎不起作用。 - SpaceCowboy74
2个回答

1

试一下这个:

                    <dxg:GridColumn>
                    <dxg:GridColumn.CellTemplate>
                        <DataTemplate>
                            <dxe:CheckEdit Checked="{Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
                        </DataTemplate>
                    </dxg:GridColumn.CellTemplate>
                </dxg:GridColumn>

0

这是一个特殊的复选框(例如DXCheckbox之类的)还是普通的WPF复选框。如果是后者,则绑定应为IsChecked={Binding Path=IsChecked, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}。

您的输出窗口中是否有任何绑定错误?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接