我正在编写的编辑器的一部分使用Wpf-TreeView。我正在使用DataBinding和ItemTemplate来填充TreeView。到目前为止,我正在操作ItemsSource(主要是ObeservableCollection)dircetly(例如使用Drag& Drop)。但是现在我读了this并且我不确定它是否真的会简化对我的思考。在继续这个项目之前,我想知道所有的优点和缺点。
如果添加,编辑或删除Data(ItemsSource),如何保持Data和ViewModel一致?这是ViewModel必须要处理的吗?如果我必须照顾这些信息,这简化了如何思考?
答案 0 :(得分:4)
MVVM非常适合WPF开发,而不仅仅是TreeView
。
如果添加,编辑了Data(ItemsSource) 或删除,如何保持数据和 ViewModel一致吗?
不确定你在这里问什么,但WPF绑定处理集合更改,只要这些集合实现INotifyCollectionChanged
。 ObservableCollection<T>
为您提供了一个非常有用的此接口实现,您可以在视图模型中使用它。
绑定使视图与视图模型保持一致。一般来说,您的目标是在您的视图中零代码隐藏。您的视图仅绑定到视图模型上的属性,视图模型负责使相关属性保持同步。这是一个非常简单的例子:
public class PersonViewModel : INotifyPropertyChanged
{
public string FirstName
{
get { return _firstName; }
set
{
if (_firstName != value)
{
_firstName = value;
OnPropertyChanged("FirstName");
OnPropertyChanged("FullName");
}
}
}
//LastName and other members omitted
public string FullName
{
get { return FirstName + " " + LastName; }
}
}
此处FullName
属性受FirstName
和LastName
的更改影响。视图可以绑定到FullName
,其他两个属性的任何更改都将在UI中显示。
我建议您在开始之前阅读POCO my blog post与DependencyObject
作为视图模型。