Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c mvvm嵌套的ObservableCollection集合已更改新闻开始索引>0_C#_Wpf_Mvvm_Observablecollection_Inotifycollectionchanged - Fatal编程技术网

C# c mvvm嵌套的ObservableCollection集合已更改新闻开始索引>0

C# c mvvm嵌套的ObservableCollection集合已更改新闻开始索引>0,c#,wpf,mvvm,observablecollection,inotifycollectionchanged,C#,Wpf,Mvvm,Observablecollection,Inotifycollectionchanged,我是新来的。我整天都在寻找解决办法,所以我决定在这里问一下 我正在开发一个使用WPF和数据绑定/MVVM的应用程序。 我有一个嵌套的ObservableCollection,它是类程序的一部分。两者都正确实现InotifyProperty更改 在我的构造函数中,我创建了一个名为ListPrograms的ObservableCollection类型的程序,并从我的数据服务中用程序列表填充它。这一切都很好。 此外,绑定工作正常,我在主视图中选择了一个程序,嵌套的价格列表显示在详细视图中。OnProp

我是新来的。我整天都在寻找解决办法,所以我决定在这里问一下

我正在开发一个使用WPF和数据绑定/MVVM的应用程序。 我有一个嵌套的ObservableCollection,它是类程序的一部分。两者都正确实现InotifyProperty更改

在我的构造函数中,我创建了一个名为ListPrograms的ObservableCollection类型的程序,并从我的数据服务中用程序列表填充它。这一切都很好。 此外,绑定工作正常,我在主视图中选择了一个程序,嵌套的价格列表显示在详细视图中。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;
        }  `
我遇到的问题是,集合更改事件仅针对我在运行时添加到集合中的新SalesPrice进行注册。我检查e.NewStartingIndex,它从初始销售价格记录的数量开始。 第一个程序和9个销售价格是它的可观察集合,e.NewsStartingIndex的值是8。 当我在运行时将一条新记录添加到列表中时,服务器甚至正在注册并通知更改

我认为这是因为我正在从dataservice传递程序对象,其中包含一个已填充的SalesPrices列表,而事件只是注册新项目

有什么想法吗


Frank

在您第一次分析所有现有集合项目时,只需对其执行事件订阅:

void GetPrograms()
{        
    var prgms = DataService.GetProgramList(SearchStringProgram);

    ListPrograms=new ObservableCollection<Program>(prgms);

    foreach (var prg in ListPrograms)
    {
        prg.SalesPrices.CollectionChanged += SalesPrices_CollectionChanged;

        foreach (SalesPrice item in prg.SalesPrices)
        {
            item.PropertyChanged += SalePrice_PropertyChanged;
        }
    }
}
void GetPrograms()
{        
    var prgms = DataService.GetProgramList(SearchStringProgram);

    ListPrograms=new ObservableCollection<Program>(prgms);

    foreach (var prg in ListPrograms)
    {
        prg.SalesPrices.CollectionChanged += SalesPrices_CollectionChanged;

        foreach (SalesPrice item in prg.SalesPrices)
        {
            item.PropertyChanged += SalePrice_PropertyChanged;
        }
    }
}