在添加项目以查看模型列表属性时,视图模型无法更改模型属性

时间:2014-04-24 19:16:26

标签: c# wpf mvvm reactiveui

老问题:

我使用ReactiveUI。如果我在ViewModelB ViewModelA执行Add命令时将新P对象添加到此类型的列表中,则必须更新ModelA中的PropertyChanged属性。但这会引发错误。如果我删除了在此属性中抛出ViewModelA.UpdateModelValue事件,则不会发生错误。但我需要它来使用这些数据对其他视图模型中的更改作出反应。有谁知道我怎么能解决这个问题?代码结构如下:

现在我收到了以下信息:

如果我从ViewModelBase.UpdateViewModelValues删除Model.PropertyChangedModel.PropertyChanged,则可以正常使用。只要两个都添加到事件中,我就会在ReactiveUI库中出现错误。只有这两个属性都添加到class ModelA : INotifyPropertyChanged { DateTime P; // In the original a property throwing PropertyChanged ObservableCollection<ViewModelB> BModels; /* PropertyChanged event passed to ModelA */ } class ViewModelA : ViewModelBase { IReactiveListDerived<ModelB> BViewModels; ReactiveCommand Add; ViewModelA(ModelA m) { Model=m; Model.PropertyChanged+=UpdateModelA; BViewModels=m.BModels.CreateDerivedList(x => ViewModelB(x)); Add=new ReactiveCommand(); Add.Subscribe(x => Model.BModels.Add(new ModelB())); } void UpdateModelA(object sender, PropertyChangedEventArgs e) { if(e.Name=="BModels") { Model.P=/*new value*/; } } } class ModelB : INotifyChanged { /* Code */ } class ViewModelB : ViewModelBase { ViewModelB(ModelB m) { /* Code */ } } class ViewModelBase : ReactiveObject { INotifyPropertyChanged Model; ViewModelBase() { Model.PropertyChanged+=UpdateViewModelValues(); } void UpdateViewModelValues(object sender, PropertyChangedEventArgs e) { /* Code Only value types are affected Property ViewModelA.BModels is not affected */ } }

所以代码结构改为:

{{1}}

1 个答案:

答案 0 :(得分:0)

我在代码中找到了First LINQ表达式的用法。在某些情况下,没有项目可以满足相应的条件。所以我出现了一个InvalidOperationException。通过使用FirstOrDefault LINQ表达式,问题得以解决。