我有一个数据库,它与我的模型(自己的线程)的webservices通信并公开数据对象。我的UI应用程序包含不同的视图和ViewModel以及自定义控件。我正在使用ServiceProvider(IServiceProvider)来访问Model并将事件路由到UI线程。 ViewModel之间的通信由Messenger提供。
这样的方式吗?
我也想知道构建DataObjects的最佳方法是什么
目前我拥有具有层次结构但不支持INotifyProperty的DataObjects,尽管子列表的类型为ObservableCollection。我没有可能在属性上实现notifypropertychange。
我想知道使MVVM友好的最好方法。实现部分类并添加必要的所有属性或命令或包装所有DataObjects并使Model列表和MVVM列表保持同步。
所有的想法和想法都表示赞赏。
答案 0 :(得分:1)
严格实现MVVM意味着您应该创建ViewModel类,这些类公开将使用View的所有DataObjects(您的Model) - View不能直接访问Model。
在此之后,您将完全控制ViewModel,并且您将能够实现INotifyPropertyChange事件,并在每次更改通知或特定操作时将ViewModel与模型同步。
答案 1 :(得分:1)
我同意贝尔莫的观点,即没有多少人没有严格执行这种模式。可以直接公开Model对象并在这些对象中实现INotifyPropertyChanged。但是下面是你可以用来实现你目前所拥有的基本手段:
class PersonViewModel : INotifyPropertyChanged
{
Person p = new Person();
public string First
{
get { return p.First; }
set
{
p.First = value;
onPropertyChanged("First");
}
}
public string Last
{
get { return p.Last; }
set
{
p.Last = value;
onPropertyChanged("Last");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void onPropertyChanged(string propertyName)
{
if (PropertyChanged!=null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName);
}
}
#endregion
}
我个人创建了一个继承的ViewModel类,以便我可以将我的INotifyPropertyChanged代码放在那里而不必重复放入。然后我的实现只是从该基类继承。