gpt4 book ai didi

c# - WPF:MVVM 和编辑分层数据

转载 作者:太空狗 更新时间:2023-10-30 01:28:08 24 4
gpt4 key购买 nike

我仍在努力思考 MVVM。假设我有一个看起来像这样的模型:

public class Company  
{
public IList<Division> Divisions { get;set;}
}

public class Division
{
public string Name { get;set;}
public IList<Department> Departments { get;set}
}

public class Department
{
public string UnitNumber { get;set;}
public string DepartmentName { get;set;}
public IList<Employee> Employees { get;set;}
}

public class Employee
{
public string FirstName { get;set;}
public string LastName { get;set;}
public string JobTitle { get;set;}
}

现在假设我想在分层网格中显示公司层次结构,我在下面创建一个 CompanyViewModel 类:

public class CompanyViewModel : INotifyPropertyChanged
{
private Company _company;
public Company Company
{
get { return _company;}
set { _company = value; NotifyPropertyChanged("Company");}
}
}

现在在我的 View (WPF) 上,我会将数据上下文设置为 ViewModel,并且选择的数据网格将绑定(bind)到“公司”路径。到目前为止一切都很好....我得到了一个很好的展开/折叠界面,可以显示部门、部门、员工......

除了:

  1. 如果网格是可编辑的怎么办...部门名称应该能够更改(并由 ViewModel 验证,员工名称也是如此......

  2. 如果我想添加新员工、部门等怎么办?所有这些都应该反射(reflect)在网格中而无需重新绑定(bind)(这就是 WPF 数据绑定(bind)的意义,不是吗?)

可能的解决方案:

每个域类都有一个单独的 ViewModel 类...

这似乎意味着从 DTO -> ViewModel 进行大量映射,重复(因为它们几乎是相同的对象,但不完全相同。)鉴于我可能已经从某种 ORM 实体 -> DTO 进行映射服务端,通过线路 (WCF) 将其发送到客户端,将每个 DTO 层次结构映射到它自己的 ViewModel 是一个繁重、昂贵的过程(更不用说这样做涉及的工作了。)

将 INotifyPropertyChanged、ObservableCollection 等内容注入(inject)我的 DTO 似乎是一种黑客行为。

有没有人有更好的解决方案?我疯了吗? ;-)

最佳答案

“将 INotifyPropertyChanged、ObservableCollection 等内容注入(inject)我的 DTO 似乎是一种黑客行为。”

我能感受到你的痛苦,但这是我在几个项目中采用的方法。

底线:要使 WPF 数据绑定(bind)像宣传的那样“工作”,您绑定(bind)的对象/集合需要支持 INotifyPropertyChanged 和 ObservableCollection。

我个人认为创建支持此功能的 DTO 比不断将数据来回转换到 View 模型或其他本质上是 DTO 对象的更丰富版本的中间对象要少得多。

关于c# - WPF:MVVM 和编辑分层数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1412103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com