私は何が間違っているか分かりません。何を試しても、グリッドは更新されません(空のままです)。ObservableCollectionへのDatagridバインディングはグリッドを更新しません
グリッドをObservableCollectionにバインドしたいが、自動クローンを作成するのではなく、このコレクションが保持する型であるProductというオブジェクトから2つのプロパティを選択する。
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 >
CODE:
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));
}
}
これは解決しませんでした...アイテムを追加した後でもまだ空のグリッド – Programer
@meyou 'ItemsGrid.DataContext = this;'をウィンドウのコンストラクタに追加してみてください。 'DataContext'が設定されていないようです。 'ItemsSource =" {Binding OrdersList、RelativeSource = {RelativeSource AncestorType = {x:Type Window}}} '' ''で、コレクションを取得する場所をバインディングに伝えるために 'ItemsSource'に' RelativeSource'バインディングを使うこともできます。 。ああ、 'OrdersList'プロパティを公開する – Rachel
ありがとう、私はそれを解決しました。プロパティが公開されている場合にのみ、なぜ機能しますか? – Programer