Ok这是另一个值得思考的问题。
MVVM声明Model与ViewModel无关。因此,ViewModel公开要绑定的View的属性。
Microsoft Code Analysis规则告诉我在模型中为我的公共变量添加属性。
警告:CA1051:Microsoft.Design:因为字段'Employee.name'是 在其声明类型之外可见,改变其可访问性 private并添加一个属性,具有与该字段相同的可访问性 目前,已提供访问权限。
现在它有两个重复的属性,我宁愿让它干,所以我想要合并ViewModel和View。这里有另一件事,模型是POCO,并且没有INotifyPropertyChanged,因此让VM了解模型值的变化是另一个问题。我使用了很多基于IList的绑定
我可能会忽略未来的问题吗?
编辑:我忘了提及,我看了how to correctly define Model to ViewModel relation?,在我们的软件中还有一件事是我们有一个单独的实体填充IList,它是一个SERVICE / UTILITY程序集。 EmployeeViewModel位于单独的VIEW程序集中。所以我无法返回ILIst。
答案 0 :(得分:2)
不要这样做。我知道这听起来像你不需要的许多额外的东西,但它会因你的应用程序变得更复杂而得到回报。我发现将ViewModel绑定到支持属性通知是绝对必要的,并让我以一种视图可以轻松使用的方式呈现数据,而不依赖于模型中的表示 - ViewModel根据需要在两者之间进行转换
如果您没有这些图层,将来对某些内容进行更改,特别是一旦通过一定程度的复杂性,将变得非常困难。
现在,您是否听取了Microsoft关于在您的模型上使用公共属性而不是公共字段的建议取决于您,但如果您需要稍后将一些逻辑放入getter和setter中,那么这是一个很好的习惯。首先,自动属性可以很好地替换简单的公共字段,从而无需在实际需要之前声明支持字段。
答案 1 :(得分:0)
这里还有另一件事,模型是POCO,而且没有INotifyPropertyChanged,所以让VM知道变化 模型值是另一个问题
由于(我假设)模型可以从任何地方更改,您唯一的另一个选择是拥有2个INPC - 一个用于Model-ViewModel,另一个用于ViewModel-View。
我个人不喜欢这种方法。太多的流和重构问题(除非你使用反射 - 这是更多的代码和查找,但高度可维护) 尝试使用部分类分别在物理上分离Model和ViewModel。例如Employee.cs和Employee.ViewModel.cs。并将它们分组 - 看起来更精细
模型需要是可移植的,INPC is fine使用可移植类库,因此您可以在各种目标中重用代码