基本上,我有一个带有各种类的模型,这些模型将我的数据加载到不同的集合中,包括集合的集合(例如Cart
的集合为Bundle
,集合的集合为Product
)。如果我对MVVM的理解是正确的,则需要为每个模型类创建一个实现INotifyPropertyChanged(直接或通过从基类继承)的ViewModel类。尽管我必须承认,在我看来,这意味着很多重复的代码,只是让ViewModel将模型类的每个属性与OnPropertyChanged调用相关联。
例如,就像this文章中所示。
我说对了吗?
我目前正在尝试了解MVVM的基础知识,因此我尝试在程序中完全实现它,而无需任何其他框架(MVVM Light和其他框架)。
答案 0 :(得分:1)
对于每个模型类,您都不需要ViewModel-Class。您的模型类应该实现INotifyPropertyChanged
-接口。
您需要ViewModels与您的视图进行交互。在ViewModel中,您可以拥有Model-Class的实例。
顺便说一句:为了避免每次在每个ViewModel和Model中都为INotifyPropertyChanged
编写代码,我创建了一个抽象基类,其中的所有内容均源自此基类。此类看起来像:
public abstract class NotifyBase : INotifyPropertyChanged
{
private readonly Dictionary<string, object> mapping;
protected NotifyBase()
{
mapping = new Dictionary<string, object>();
}
protected void Set<T>(T value, [CallerMemberName] string propertyName = "")
{
mapping[propertyName] = value;
OnPropertyChanged(propertyName);
}
protected T Get<T>([CallerMemberName] string propertyName = "")
{
if(mapping.ContainsKey(propertyName))
return (T)mapping[propertyName];
return default(T);
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemeberName] string propertyName = null)
{
PropertyChangedEventHandler handler = PropertyChanged;
if(handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}