如何在TreeView中操作数据?我应该使用ViewModelPattern吗?

时间:2009-03-29 02:23:22

标签: wpf design-patterns

我正在编写的编辑器的一部分使用Wpf-TreeView。我正在使用DataBinding和ItemTemplate来填充TreeView。到目前为止,我正在操作ItemsSource(主要是ObeservableCollection)dircetly(例如使用Drag& Drop)。但是现在我读了this并且我不确定它是否真的会简化对我的思考。在继续这个项目之前,我想知道所有的优点和缺点。

如果添加,编辑或删除Data(ItemsSource),如何保持Data和ViewModel一致?这是ViewModel必须要处理的吗?如果我必须照顾这些信息,这简化了如何思考?

1 个答案:

答案 0 :(得分:4)

MVVM非常适合WPF开发,而不仅仅是TreeView

  

如果添加,编辑了Data(ItemsSource)   或删除,如何保持数据和   ViewModel一致吗?

不确定你在这里问什么,但WPF绑定处理集合更改,只要这些集合实现INotifyCollectionChangedObservableCollection<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属性受FirstNameLastName的更改影响。视图可以绑定到FullName,其他两个属性的任何更改都将在UI中显示。

我建议您在开始之前阅读POCO my blog postDependencyObject作为视图模型。