Wpf MVVM:处理集合中模型的逻辑子对象
使用MVVM,一种类型的视图模型包括它们表示为字段的模型 所以我有一个CompanyModel和一个CompanyViewModel,它有一个CompanyModel实例 这个公司模型有一个属于它的部门集合。因此CompanyModel有一个列表(或一些集合类) 现在,公司视图模型希望将这些部门表示为一个Wpf MVVM:处理集合中模型的逻辑子对象,wpf,collections,mvvm,observablecollection,Wpf,Collections,Mvvm,Observablecollection,使用MVVM,一种类型的视图模型包括它们表示为字段的模型 所以我有一个CompanyModel和一个CompanyViewModel,它有一个CompanyModel实例 这个公司模型有一个属于它的部门集合。因此CompanyModel有一个列表(或一些集合类) 现在,公司视图模型希望将这些部门表示为一个可观察集合;您可以在公司视图模型中添加新的部门 确保ObservableCollection和Models集合保持同步的最佳方法是什么?因此,当我添加一个新的DivisionViewModel并
可观察集合
;您可以在公司视图模型中添加新的部门
确保ObservableCollection和Models集合保持同步的最佳方法是什么?因此,当我添加一个新的DivisionViewModel并保存它时,它会自动将其模型保存到CompanyModel的列表中
我有更多类似于父/子关系的类,所以我希望可以在AbstractViewModel类中重用或实现一些东西
注意:My ViewModels实现IEditableObject最简单的方法可能是创建一个新类,该类继承自ObservableCollection,并将源列表和各种初始化和映射函数作为参数。其签名可能如下所示:
public class SynchronizedObservableCollection<TDest, TSource> : ObservableCollection
{
public SynchronizedObservableCollection(
IList<TSource> source,
Func<TSource, TDest> newDestFunc,
Func<TDest, TSource> newSourceFunc),
Func<TSource, TDest, bool> mapSourceToDestFunc
{
// Initialize the class here.
}
}
具体实现留给读者作为练习:-)。但我在以前的项目中使用过类似的类,并取得了一些成功。只需确保围绕它进行一些良好的单元测试,这样您就知道您可以依赖它,而不必花费大量时间查找事件处理调用堆栈。最简单的方法可能是创建一个继承自ObservaleCollection的新类,它以源列表和各种初始化和映射函数作为参数。其签名可能如下所示:
public class SynchronizedObservableCollection<TDest, TSource> : ObservableCollection
{
public SynchronizedObservableCollection(
IList<TSource> source,
Func<TSource, TDest> newDestFunc,
Func<TDest, TSource> newSourceFunc),
Func<TSource, TDest, bool> mapSourceToDestFunc
{
// Initialize the class here.
}
}
具体实现留给读者作为练习:-)。但我在以前的项目中使用过类似的类,并取得了一些成功。只要确保围绕它进行了一些良好的单元测试,这样您就知道您可以依赖它,而不必花费大量时间查找事件处理调用堆栈。我会使用INotifyCollectionChanged事件。但实际上这取决于一项任务。如果您希望从服务接收模型并保存它,则同步没有意义。我将使用INotifyCollectionChanged事件。但实际上这取决于一项任务。如果你想从一个服务接收一个模型并保存它,同步是没有意义的。我喜欢它。我现在主要把它看作是一种单向转移,但我想如果我能观察到这两个集合,那么你可以双向转移。这是Observable不适合WPF/Silverlight的一个很好的理由。我喜欢它。我现在主要把它看作是一种单向转移,但我想如果我能观察到这两个集合,那么你可以双向转移。这是Observable不适合WPF/Silverlight的可靠原因。