我正在编写的编辑器的一部分使用了 Wpf-TreeView。我使用 DataBinding 和 ItemTemplate 来填充 TreeView。到目前为止,我正在直接操作 ItemsSource(主要是 ObeservableCollection 的)(例如使用拖放)。但现在我读到this我不确定它是否真的会简化我的想法。在继续该项目之前,我想了解所有优点和缺点。
如果添加、编辑或删除Data(ItemsSource),如何保持Data和ViewModel一致?这是 ViewModel 必须处理的事情吗?如果我必须照顾一致性,这如何简化思考?
最佳答案
MVVM 非常适合一般的 WPF 开发,而不仅仅是 TreeView
s。
If Data(ItemsSource) is added, edited or delete, how to keep the Data and the ViewModel consistent?
不确定您在这里要问什么,但 WPF 绑定(bind)可以处理集合更改,只要这些集合实现 INotifyCollectionChanged
。 ObservableCollection<T>
为您提供了该接口(interface)的一个很好、有用的实现,您可以在 View 模型中使用它。
绑定(bind)使 View 与 View 模型保持一致。一般来说,您的目标是零代码隐藏。您的 View 仅绑定(bind)到 View 模型上的属性, View 模型有责任保持相关属性同步。这是一个非常简单的示例:
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
。该 View 只能绑定(bind)到 FullName
对其他两个属性的任何更改都将在 UI 中可见。
我建议您阅读my blog post POCO 与 DependencyObject
在开始之前将其作为 View 模型。
关于wpf - 如何操作TreeView中的数据?我应该使用 ViewModelPattern 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/694007/