【问题标题】:Tick the checkbox column in WPF datagrid through code通过代码勾选 WPF 数据网格中的复选框列
【发布时间】:2016-06-17 09:42:05
【问题描述】:

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

我想知道如何在代码中勾选复选框,假设我们是否有标记全部选项?

我尝试将 ObservableCollection 记录属性值更新为 true,但它无助于更新 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如下

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

设置ItemsSource如下

 docs = new ObservableCollection<InvoiceDoc>(); ;

 dgInvoices.ItemsSource = docs;

一旦在集合中设置值,我希望网格会自动选中复选框。

【问题讨论】:

    标签: wpf datagrid


    【解决方案1】:

    绑定到 ObservableCollection 仅在添加或删除项目时才具有反应性。

    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();使用属性名称。

    【讨论】:

    • 哦,是的。添加和删​​除工作正常。你有样品吗?
    • 但是我们是否需要在某个地方为这个事件添加处理程序?
    • 不,你不必这样做。这就是 wpf + 绑定工作的魔力 ;)
    • 请提供一些代码,以便我仔细查看
    • 哦,我的代码有一个小错误,我解决了。谢谢。
    猜你喜欢
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多