Привязка DataGrid к ObservableCollection не обновляет сетку - PullRequest
0 голосов
/ 21 марта 2012

Пожалуйста, помогите мне, я понятия не имею, что не так. Что бы я ни пытался, сетка просто не обновляется (остается пустой).

Я хочу, чтобы сетка была привязана к ObservableCollection, но не для создания автоматических cloumns, а для выбора двух свойств из объекта с именем Product, который является типом, который содержит эта коллекция.

XAML:

 <DataGrid  x:Name="itemsGrid" ItemsSource="{Binding OrdersList}" AutoGenerateColumns="False" Style="{StaticResource GridStyle}">
     <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding Path=Product.Amount}" Header="AMOUTN" />
        <DataGridTextColumn Binding="{Binding Path=Product.Name}" Header="NAME"  />
     </DataGrid.Columns>
</DataGrid >

КОД:

  public partial class Orders : Window,INotifyPropertyChanged
    {

      ObservableCollection<Product> _ordersList = new ObservableCollection<Product>();
      public event PropertyChangedEventHandler PropertyChanged;

      private ObservableCollection<Product> OrdersList
    {
        get { return this._ordersList; }

        set { _ordersList = value; NotifyPropertyChanged("OrdersList"); }
    }

    private void addProduct(Product p)
    {
        OrdersList.Add(p);
        NotifyPropertyChanged("OrdersList");
    }
    private void removeProduct(Product p)
    {
        OrdersList.Remove(p);
        NotifyPropertyChanged("OrdersList");
    }

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

}

Ответы [ 2 ]

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

Я думаю, вам просто нужно удалить слово Product. из ваших привязок. DataContext каждого DataGridRow является объектом типа Product, поэтому ваша привязка должна указывать на свойства Product

 <DataGrid.Columns>
    <DataGridTextColumn Binding="{Binding Path=Amount}" Header="AMOUNT" />
    <DataGridTextColumn Binding="{Binding Path=Name}" Header="NAME"  />
 </DataGrid.Columns>
0 голосов
/ 21 марта 2012

Вам нужно установить this.DataContext = this; где-нибудь.Лучше всего это сделать в событии Load окна.

...