我是WPF的新手,所以我花时间在网上搜索关于如何完成工作的示例和教程。我已经得出结论,前进的方法是尝试使用MVVM模式作为我的应用程序结构的指导。如果没有我的技术能力,我完全可以理解这个理论。我有一两个问题,希望你或许能指出我在应用程序设计方面的一些问题。
我希望保留一份客户列表。我见过几个例子。这些涉及加载包含Customer对象列表的Customers存储库。创建了Customer的相应View和ViewModel。当用户选择要编辑的客户时,将在Customers集合中为Customer对象创建View和ViewModel。这样可以在进行更改时使所有内容保持同步。我的问题是:我的客户模型非常复杂,它包含基本的客户信息,名称,地址等,还包含有关客户,类别列表,产品配置文件,目标预算等的属性。我希望这些属性可以在客户中进行编辑查看,但不希望将它们加载到Customers存储库中的开销。我只想在需要时加载扩展的客户信息,但更新了客户视图的更改。实现这一目标的最佳方法是什么?
我的第二个问题是:如果我将客户信息拆分为多个选项卡,我应该为每个选项卡分别使用View和ViewModel,还是只有一个View。什么是最佳做法?
我想我会使用Linq to SQL来处理数据库处理。在多用户环境中,客户可能同时由多个用户添加。如何反映我的Customers存储库中其他用户的新增内容?我需要重装吗?
有关处理数据库并发问题的任何建议。如果其他用户编辑或删除了我正在编辑的客户,那么当我尝试保存时会发生什么?我熟悉数据集和ADO.net,并且处理使用DataAdapter时出现的任何并发错误,Linq to SQL是否有类似的方法?
我很欣赏这里有很多模糊的问题。但我要感谢所提供的任何指导。
此致 添
答案 0 :(得分:1)
我会告诉你我的意见,但你必须形成自己的意见。
我不太喜欢这些样本,因为它们只为一个实体(客户)做了很多工作。我的应用程序中有很多实体,所以我最终得到了一些代码生成并使用了更多的继承。
样品需要一些现实检查。例如,在Josh Smith MVVM示例中,如果您更改客户,则更改会传播到列表和其他位置,这在示例中很好,但如果您有业务应用程序,则不希望传播除非用户按下“保存”并将所有业务规则应用于对象,否则更改。
我也不会购买纯MVVM,因为禁止在代码中放置任何东西,你必须code lots of lines only for a double-click,来点人,这是一个简单的双击。
关于你的问题:
答案 1 :(得分:1)
我开源sample framework called SoapBox Core用于使用MVVM进行WPF(并且还可以使用MEF进行扩展)。如果你忽略了MEF部分,那么就如何做你正在谈论的事情有一些好主意。我特别想看一下Options Dialog是如何工作的,因为它处理了Eduardo指出的问题(如何处理编辑内容,但只在用户提交更改时将结果发布到应用程序的其余部分)。在这种情况下,它使用.NET中的用户设置作为后备存储,但它可以使用您想要的任何内容,例如实体。