[英]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)是的。
答案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.