C# WPF DataGrid双向源绑定到列表<;数据类>;以编程方式

C# WPF DataGrid双向源绑定到列表<;数据类>;以编程方式,c#,wpf,binding,datagrid,runtime,C#,Wpf,Binding,Datagrid,Runtime,我需要在运行时进行绑定,因为DataGrid将绑定到不同的数据源和/或类对象。我有两个班CA和CB。在CB中,有一种设置绑定的方法。但是下面的简单方法只设置了单向绑定。如何进行双向绑定?也就是说,当列表列表中的元素发生更改时,DataGrid1将自动更新 class CA { private int a = 1; private string b = ""; private bool c = true; public int A { get { return a;

我需要在运行时进行绑定,因为DataGrid将绑定到不同的数据源和/或类对象。我有两个班CA和CB。在CB中,有一种设置绑定的方法。但是下面的简单方法只设置了单向绑定。如何进行双向绑定?也就是说,当
列表
列表中的元素发生更改时,DataGrid1将自动更新

class CA
{
    private int a = 1;
    private string b = "";
    private bool c = true;
    public int A { get { return a; } set { a = value; } }
    public string B { get { return b; } set { b = value; } }
    public bool C { get { return c; } set { c = value; } }
}

class CB
{
    List<CA> datalist = new List<CA>();
    private void SetBinding(ref List<CA> ca, ref DataGrid dg)
    {
        dg.ItemsSource = ca;
    }
}
CA类
{
私人INTA=1;
私有字符串b=“”;
私有布尔c=真;
公共int A{get{return A;}set{A=value;}}
公共字符串B{get{return B;}set{B=value;}}
公共bool C{get{return C;}set{C=value;}}
}
CB类
{
List datalist=新列表();
私有无效设置绑定(参考列表ca,参考数据网格dg)
{
dg.ItemsSource=ca;
}
}

为了正确绑定,您的类CA应该实现INotifyPropertyChanged接口。见: 所有属性都应该引发propertyChanged事件以通知数据绑定控件

在这里,您可以找到简单的示例:


另外,我建议使用ObservableCollection而不是带有数据绑定的List,因为它已经INotifyPropertyChanged开箱即用,并通知数据绑定控件元素的添加、删除和更改。

为了正确绑定,您的类CA应该实现INotifyPropertyChanged接口。见: 所有属性都应该引发propertyChanged事件以通知数据绑定控件

在这里,您可以找到简单的示例:

另外,我建议使用ObservaleCollection而不是带有数据绑定的List,因为它已将InotifyProperty更改为开箱即用,并通知数据绑定控件元素的添加、删除和更改。

您的类“CA”将需要实现INotifyPropertyChanged,以便在数据网格中反映对CA对象的更改

如果您还希望datagrid知道正在添加和删除的项,则需要使用ObservableCollection,而不是List,或者至少使用实现INotifyCollectionChanged的集合。

您的类“CA”需要实现INotifyPropertyChanged,以便在datagrid中反映对CA对象的更改


如果您还想让datagrid知道正在添加和删除的项,那么您需要使用ObservableCollection,而不是List,或者至少使用实现INotifyCollectionChanged的集合。

您先告诉我,但只是为了澄清,使用ObservaleCollection仍然意味着OP需要在CA上实现INotifyPropertyChanged。当然,随机对象的各个属性没有跟踪更改。你先告诉我,但要澄清的是,使用ObservaleCollection仍然意味着OP需要在CA上实现INotifyPropertyChanged。当然,random Objective的各个属性没有跟踪变化我认为同样重要的是要注意,您不应该将ca或dg作为ref传递,除非您有非常令人信服的理由这样做(我无法想象)。我认为同样重要的是要注意,您不应该将ca或dg作为ref传递,除非你有令人信服的理由这么做(我无法想象)