Двусторонняя привязка источника WPF DataGrid к списку <DataClass>программным путем - PullRequest
0 голосов
/ 21 марта 2012

Мне нужно выполнить привязку во время выполнения, поскольку DataGrid будет связан с различными источниками данных и / или объектами класса. У меня есть два класса CA и CB. В CB есть способ настроить привязку. Но простой способ ниже устанавливает только один способ связывания. Как сделать двустороннюю привязку? И.Е. при изменении элемента в списке List<CA> 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;
    }
}

Ответы [ 2 ]

2 голосов
/ 21 марта 2012

Для правильной привязки ваш класс CA должен реализовать интерфейс INotifyPropertyChanged.См .: http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx И все свойства должны вызывать событие propertyChanged для уведомления элементов управления с привязкой к данным.

Здесь вы можете найти простой пример: http://msdn.microsoft.com/en-us/library/ms229614.aspx

Также я рекомендуюиспользуя ObservableCollection вместо List с привязкой данных, поскольку он имеет INotifyPropertyChanged из коробки и уведомляет элемент управления привязкой данных о добавлении, удалении и изменениях элементов.

1 голос
/ 21 марта 2012

Ваш класс "CA" должен будет реализовать INotifyPropertyChanged для того, чтобы изменения в объектах CA отражались в вашей сетке данных.

Если вы также хотите, чтобы сетка данных знала о добавлении и удалении элементов, вы будетенеобходимо использовать ObservableCollection вместо List или хотя бы коллекцию, которая реализует INotifyCollectionChanged.

...