Список привязки к DataGrid Silverlight - PullRequest
1 голос
/ 31 марта 2010

У меня проблема с привязкой List к элементу DataGrid. Я создал класс, который реализует INotifyPropertyChange и хранит список заказов:

public class Order : INotifyPropertyChanged
{

    private String customerName;

    public String CustomerName
    {
        get { return customerName; }
        set { 
                customerName = value;
                NotifyPropertyChanged("CustomerName");
            }
    }

    private List<String> orderList = new List<string>();

    public List<String> OrderList
    {
        get { return orderList; }
        set { 
                orderList = value;
                NotifyPropertyChanged("OrderList");
            }
    } 




    public void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }  

В xaml есть простой компонент DataGrid, который связывает элемент OrderList:

<data:DataGrid x:Name="OrderList" ItemsSource="{**Binding OrderList**, Mode=TwoWay}" Height="500" Width="250" Margin="0,0,0,0" VerticalAlignment="Center" 

У меня также есть кнопка в графическом интерфейсе, которая добавляет элемент в OrderList:

order.OrderList.Add ( "пункт");

DataContext установлен для глобального объекта:

      Order order = new Order();
      OrderList.DataContext = order;

Проблема в том, что когда я нажимаю кнопку, элемент не отображается в dataGrid. Это появляется после щелчка по строке сетки. Это швы, как INotifyPropertyChange не работает ... Что я делаю не так ??

Пожалуйста, ПОМОГИТЕ :)

1 Ответ

2 голосов
/ 31 марта 2010

INotifyPropertyChange работает нормально, так как ваш код для добавления нового элемента в существующий List фактически не переназначает новое значение свойству OrderList (то есть подпрограмма set там никогда не вызывается) нет звонка на NotifyPropertyChanged. Попробуйте это так: -

public class Order : INotifyPropertyChanged 
{ 

    private String customerName; 

    public String CustomerName 
    { 
        get { return customerName; } 
        set {  
                customerName = value; 
                NotifyPropertyChanged("CustomerName"); 
            } 
    } 

    private ObservableCollection<String> orderList = new ObservableCollection<String>(); 

    public ObservableCollection<String> OrderList 
    { 
        get { return orderList; } 

    }  


    public void NotifyPropertyChanged(string propertyName) 
    { 
        if (PropertyChanged != null) 
        { 
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
        } 
    }   
}

Тип ObservableCollection<T> поддерживает информирование INotifyCollectionChanged, которое будет информировать DataGrid, когда элементы добавляются или удаляются из коллекции.

...