繁体   English   中英

如何使用WPF树视图实现MVVM?

[英]How to implement MVVM with the WPF treeview?

我以前没有使用过WPF或MVVM模式。
但是,我想创建一个简单的文档管理系统,并希望使用上述技术来实现。

我已经在数据库中为分层文件系统建模,并希望在树形视图中显示它。
EER图
如您所见,每个目录中可以有多个子目录和多个文件。

我已经阅读了有关该主题的一些教程,如果我对它们的理解正确,那么我应该为目录和文件创建模型类,直接将数据库中的数据存储在其中。
例:

public class Directory
{
    private int id;
    public int Id
    {
        get { return id; }
        set { id = value; }
    }

    private string name;
    public string Name
    {
        get { return name; }
        set { name = value; }
    }

    private int parent;
    public int Parent
    {
        get { return parent; }
        set { parent = value; }
    }

    private DateTime dateCreatedOn;
    public DateTime DateCreatedOn
    {
        get { return dateCreatedOn; }
        set { dateCreatedOn = value; }
    }
}

然后,每个模型类都应该具有一个关联的视图模型类,该类可以实现其他属性,这些属性仅与描述此类对象将绑定到的UI元素有关。
在这种情况下,视图模型类应具有treeviewitem的isExpanded和isSelected属性。
然后,我需要整个树视图的另一个视图模型类,其中包含应显示的目录和文件的集合。

我的问题是:

  1. 我是否正确理解了mvvm概念?
  2. 目录的哪个类,模型或视图模型应实现iNotifyPropertyChanged接口?
  3. 目录的视图模型类应包含与模型类相同的属性,还是在视图模型类中对模型对象的引用就足够了?
  4. 如果视图模型类应再次包含与模型类相同的属性,那么确保模型对象和关联的视图模型对象始终保持同步的最佳方法是什么?

我希望这个问题是可以理解的,并感谢您的所有帮助。 安达里

答案1)是的。

答案2)视图模型应具有iNotifyPropertyChanged。

答案3)是。 并且应该明确地映射它们。 即:

   this.property1 = model.property1

答案4)使用相同的名称,请参阅答案3。

如果在视图模型中使用私有-公共属性对,请在视图模型中使用iNotifyPropertyChanged,并将模型的属性映射到视图模型中的相应属性,则应进行设置。

模型也可以实现iNotifyPropertyChanged,您无需再次在视图模型中重复属性。

https://msdn.microsoft.com/zh-CN/library/gg405484(PandP.40).aspx

“该模型还可以通过IDataErrorInfo(或INotifyDataErrorInfo)接口支持数据验证和错误报告。IDataErrorInfo和INotifyDataErrorInfo接口允许在值更改时通知WPF数据绑定,以便可以更新UI。它们还支持数据验证。以及UI层中的错误报告。”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM