【发布时间】:2012-05-13 07:32:17
【问题描述】:
我花了很长时间尝试为以下挑战找到一个优雅的解决方案。我一直无法找到解决问题的方法。
我有一个 View、ViewModel 和 Model 的简单设置。为了解释起见,我将保持非常简单。
-
Model有一个名为Title的字符串类型的属性。 -
Model是View的 DataContext。 -
View有一个TextBlock数据绑定到模型上的Title。 -
ViewModel有一个名为Save()的方法,可以将Model保存到Server -
Server可以推送对Model所做的更改
到目前为止一切顺利。现在我需要进行两项调整以使模型与Server 保持同步。服务器的类型并不重要。只知道我需要调用Save() 才能将模型推送到Server.
调整一:
-
Model.Title属性将需要调用RaisePropertyChanged(),以便将Server对Model所做的更改转换为View。这很好用,因为Model是View的 DataContext
还不错。
调整 2:
- 下一步是调用
Save()以保存从View到Model上的Model所做的更改Server。这就是我卡住的地方。我可以处理ViewModel上的Model.PropertyChanged事件,该事件在模型发生更改时调用 Save(),但这会使其响应服务器所做的更改。
我正在寻找一个优雅且合乎逻辑的解决方案,如果可行,我愿意更改我的架构。
【问题讨论】:
-
有些奇怪.. 使用模型作为数据上下文?这不是实际的 MVVM。首先只是测试 ViewModel,就好像“不存在 View”一样。
-
应用程序的 UI 很重,我选择尝试一种将模型直接转换为视图的方法。但是,某些属性由 ViewModel 处理。看到这个:stackoverflow.com/a/10324065/1120175
-
@ndsc 请深入了解您引用的问题,尤其是我的回答。作为 DataContext 的模型确实严重违反了 MVVM 模式。
标签: c# silverlight mvvm domain-driven-design prism