通过代码勾选WPF数据网格中的复选框列

时间:2016-06-17 09:42:05

标签: wpf datagrid

我有一个ObservableCollection项,其中一个属性是bool。 当我将datagrid的itemsSource设置为ObservableCollection时,它会自动生成带有bool属性的复选框列的列。

我想知道我们如何勾选代码中的复选框,假设我们有标记所有选项?

我尝试使用true更新ObservableCollection记录属性值,但它不帮助更新UI。

请帮忙。

[编辑:下面的代码按照答案中的建议工作] 我的班级如下

public class InvoiceDoc : INotifyPropertyChanged
    {   
        private bool _Selected;
        [DisplayName("Selected")]
        public bool Selected
        {
            get { return _Selected; }
            set { _Selected = value; this.OnPropertyChanged(); }
        }


        [DisplayName("Date")]                 
        public DateTime DocDate { get; set; }
        public event PropertyChangedEventHandler PropertyChanged;

        private void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            if (PropertyChanged !=null)
                this.PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

}

数据网格如下

<DataGrid x:Name="dgInvoices" Margin="32,110,32,59" AutoGeneratingColumn="dgInvoices_AutoGeneratingColumn"/>

设置ItemsSource如下

 docs = new ObservableCollection<InvoiceDoc>(); ;

 dgInvoices.ItemsSource = docs;

我希望网格在设置集合中的值后自动选中复选框。

1 个答案:

答案 0 :(得分:0)

绑定到ObservableCollection只有在添加或删除Item时才会被激活。

您的Collection中的元素必须实现INotifyPropertyChanged,以便UI识别更改

编辑:

假设您的馆藏中有以下物品:

public class MyClass {

  public string Name { get; set; }

  public bool IsActive { get; set; }

}

现在要将此类修改为以下内容:

public class MyClass : INotifyPropertyChanged{
  private string _name;
  private bool _isActive;

  public string Name
  {
    get { return this._name; }
    set { this._name = value; this.OnPropertyChanged();}
  }

  public bool IsActive
  {
    get { return this._isActive; }
    set { this._isActive = value;
      this.OnPropertyChanged();
    }
  }

  public event PropertyChangedEventHandler PropertyChanged;

  private void OnPropertyChanged([CallerMemberName] string propertyName = null) {
    this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  }
}

如果有任何错误,请删除CallerMemberNameAttribute并调用this.OnPropertyChanged();与Propertyname。