![]() |
1
10
我一直在通过ViewModel公开模型,只是为了保持简单,不要重复我自己(干)。 要避免在模型中添加属性以适应UI(如Benjamin所述),唯一的方法是将模型保留为ViewModel的属性,这样就可以向ViewModel添加属性,而不会弄乱模型。 ie:viewModel是DataContext,它有一个返回模型的模型属性
|
![]() |
2
5
我看到的主要问题是您的模型(可能是业务对象)必须适应UI。它可能会影响很多其他的用户界面或业务层。 您可以想象在同一个对象上具有不同验证级别的几个UI。这在您的示例中是不可能的。 |
![]() |
3
4
问题是,正如其他人所说,你不能适应这种观点。 然而,我常常不想重复我自己-正如爱德华多也说过的,暴露在模特身上是要约束的。 我发现,当您想更改视图的值时,这个解决方案有点不一致,那么有些方案将绑定“model.name”,而其他方案则只是更改属性的“name”,而有些方案就不能这样工作。 我的解决方案是创建一个viewModelProxy类,在该类中可以转发其他类的属性,并免费获取属性通知。通过派生dynamicObject(我省略了代码通知、IDataError等)很容易完成。很酷的是,数据中的所有属性都会被转发——如果您实现/重写一个将绑定到的属性——因此,这样就不必重复代码,并且您有一个明智的方法来使用DynamicObject。
} |
![]() |
4
1
在Silverlight中通过注释使用验证是正确的,而不是用代码填充ViewModel。 在任何特殊验证规则的情况下,您可以创建自定义验证程序并用[CustomValidation…]修饰成员,这将再次使验证远离ViewModel。 在任何情况下,您描述的业务规则通常是跨视图共享的。对于特殊情况视图,可以在控制器中添加特定验证。 一般来说:视图模型是一个相对哑的对象,用于保存视图的值。如果您开始发现您正在添加逻辑、事件处理程序和其他,那么您可能应该考虑引入一个控制器对象…即使MVVM中没有C:) |
![]() |
5
1
要在ViewModel中公开模型,需要准备模型以适应视图,因此应使用视图特定的代码污染模型:
不要用其他东西污染你的模型,完美的模型应该与其他库的依赖性最小,这样它就可以在同一个应用程序中与不同的平台(ASP.NET、Mobile、Mono、WinForm、WPF等)共享。或升级/降级。 反正… 我做了一个 small WPF application (还没有完成),我用了unhadins,nhibernate,castle来建造它。我不认为这是最好的解决方案,但我真的很高兴与之合作。首先检查代码,然后查看实体、验证逻辑和业务逻辑的分离。程序集分离的设计是为了最小化核心应用程序、UI和应用程序逻辑之间的依赖关系。 |
![]() |
Xsayar · 如何将两个命令绑定到WPF按钮? 6 年前 |
![]() |
Mark Denom · 我的数据绑定是如何写出长度属性的? 6 年前 |
![]() |
Dev · 如何更新绑定到UI的集合? 6 年前 |
![]() |
Detlef D Soost · 多重绑定未设置值 6 年前 |
![]() |
Jack Guo · 在MVVM中清除集合视图的正确方法 6 年前 |