[英]ObservableCollection<> CollectionChanged Not Firing
我在WPF應用程序中有一個數據網格,該數據網格像這樣綁定到ObservableCollection
<DataGrid ItemsSource="{Binding Spring.SpringData, Mode=OneWay}" />
我的數據顯示正常,我可以編輯網格中的數據,但是當我手動編輯網格中的數據時,它不會觸發PublishSpringChange事件。 基礎數據發生更改,但事件未觸發,我還缺少什么?
使用具有以下內容的Spring模型
public class Spring : INotifyPropertyChanged
{
private ObservableCollection<SpringData> _SpringData;
public ObservableCollection<SpringData> SpringData
{
get { return _SpringData; }
}
public Spring()
{
....
_SpringData = new ObservableCollection<SpringData>();
SpringData.CollectionChanged += PublishSpringChange;
...
}
private void PublishSpringChange(object sender, NotifyCollectionChangedEventArgs e)
{
// Code that does not run!
}
}
帶有一個SpringData類
public class SpringData: BindableBase
{
private double _force;
private double _displacement;
public SpringData(double displacement, double force)
{
Displacement = displacement;
Force = force;
}
public double Displacement
{
get { return _displacement; }
set { SetProperty(ref _displacement, value); }
}
public double Force
{
get { return _force; }
set { SetProperty(ref _force, value); }
}
}
僅當您實際修改集合時才觸發INotifyCollectionChanged
。 這是您在集合中添加,刪除,移動,替換或重置項目的時間。 更改SpringData
對象中的屬性之一時,它將不會觸發。
為了偵聽SpringData對象的更改,假定該對象實現了INotifyPropertyChanged
,則需要將偵聽器連接到每個項目的PropertyChanged
事件。
有時為所有屬性設置單個處理程序非常有用。 這是您的操作方法。
如上所述,處理CollectionChanged:
_SpringData = new ObservableCollection<SpringData>();
SpringData.CollectionChanged += PublishSpringChange;
現在,對於所有添加和刪除到集合中的對象,向PropertyChanged添加一個處理程序:
private void PublishSpringChange(object sender, NotifyCollectionChangedEventArgs e)
{
foreach (INotifyPropertyChanged added in e.NewItems)
{
added.PropertyChanged += SpringDataOnPropertyChanged;
}
foreach (INotifyPropertyChanged removed in e.OldItems)
{
removed.PropertyChanged -= SpringDataOnPropertyChanged;
}
}
private SpringDataOnPropertyChanged(object sender, PropertyChangedEventArgs propertyChangedEventArgs)
{
//your code here
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.