我是stackoverflow的新手。我整天都在寻找解决方案,所以我决定在这里问。
我正在开发一个使用 WPF 和数据绑定/MVVM 的应用程序。我有一个嵌套的 ObservableCollection,它是类程序的一部分。两者都正确实现了 INotifyPropertyChange。
在我的构造函数中,我创建了一个名为 ListPrograms 的 Program 类型的 ObservableColletion,并从我的数据服务中用程序列表填充它。这一切都很好。绑定也正常工作,在我的主视图中,我选择了一个程序,嵌套的价格列表显示在详细视图中。OnPropertyChange 为 SalesPrice 的每个属性正确触发。
我的要求是,在用户输入时,程序需要重新计算嵌套列表的每个行项目中的累积价格。我有一个方法可以正确地做到这一点。
我为了运行该方法,我尝试附加一个 collectionchanged 事件。
`void GetPrograms()
{
ListPrograms.Clear();
var prgms = DataService.GetProgramList(SearchStringProgram);
ListPrograms=new ObservableCollection<Program>(prgms);
foreach (var prg in ListPrograms)
{
prg.SalesPrices.CollectionChanged+=SalesPrices_CollectionChanged;
} `
///
void SalesPrices_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems != null)
foreach (SalesPrice item in e.NewItems)
item.PropertyChanged += SalePrice_PropertyChanged;
if (e.OldItems != null)
foreach (SalesPrice item in e.OldItems)
item.PropertyChanged -= SalePrice_PropertyChanged;
}
void SalePrice_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
RecalcSalePrice(CurrentProgram.SalesPrices);
}
我遇到的问题是集合更改事件仅为我在运行时添加到集合中的新 SalesPrices 注册。我检查了 e.NewStartingIndex,它以初始 SalesPrice 记录的数量开始。(例如,第一个程序和 9 个销售为其 ObservableColletion 定价,而 e.NewStartingIndex 的值为 8)。当我在运行时将新记录添加到列表中时,甚至正在注册并通知更改。
我认为这种情况正在发生,因为我从数据服务中传递了带有已填充的 SalesPrices 列表的 Program 对象,并且该事件仅注册新项目。
任何想法?
坦率