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

标签 wpf design-patterns

我正在编写的编辑器的一部分使用了 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)可以处理集合更改,只要这些集合实现 INotifyCollectionChangedObservableCollection<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/

相关文章:

c# - 尝试使用 new Func<int, int, int> 理解维基百科策略模式示例

java - 为什么我要在 switch 语句上使用责任链

java - 使用数据库时可以使用类型检查代码吗?

c# - WPF/XAML : How to reference class that is not defined within any namespace

wpf - 如何在 View 模型中检索 Canvas 尺寸

c# - 有条件地设置 GridViewColumn 单元格模板

c# - wpf 中的等效 CreateGraphics

c# - 将 ObservableCollection 绑定(bind)到 ItemsControl - 并不像听起来那么简单?

java - 关于java中的单例模式,为什么不直接使用静态变量而不是在方法中将静态变量分配给新的局部变量?

java - 每个单元的自定义单元工厂 JavaFX