2016-08-08 53 views
0

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

我已经在我的数据库中建立了一个分层文件系统,并希望在树视图中显示它。
EER-Diagramm
正如你所看到的,每个目录可以有多个子目录和多个文件。

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

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. 如果视图模型类应该再次包含模型类的相同属性,那么确保模型对象和关联的视图模型对象始终保持同步的最佳方法是什么?

我希望这个问题是可以理解的,谢谢你的一切帮助。 Andahari

+0

问题2-4肯定是单独提出的。 –

+0

HierarchicalDataTemplate – Will

回答

0

答案1)是的。

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

答案3)是的。他们应该明确映射。即:

this.property1 = model.property1 

答案4)使用相同的名字,看看答案3.

如果您使用的视图模型公私财产对,在视图模型使用INotifyPropertyChanged的,并将模型的属性映射到视图模型中的相应属性,应该设置。

0

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

https://msdn.microsoft.com/en-us/library/gg405484(PandP.40).aspx

“的模式还可以支持数据验证和错误通过IDataErrorInfo的(或INotifyDataErrorInfo)接口报告该IDataErrorInfo的和INotifyDataErrorInfo接口允许WPF数据绑定时得到通知的值改变,使得UI可以是他们还支持UI层中的数据验证和错误报告。“