我想要一个仅在视图为脏时启用的保存按钮。我该怎么做呢?
我的特殊情况是使用.Net 2.0的WinForms应用程序。我有一个演示者调用的服务层。服务层返回屏幕绑定DTO。
将视图绑定到此DTO并让DTO实现isDirty属性是否可以?或者我应该将数据从DTO卸载到专门为演示目的而设计的另一个对象,例如视图模型?
答案 0 :(得分:6)
视图永远不应该是脏的。只有你的模特。
然后你可以简单地让一个事件在你的模型变脏时触发,一个事件在它变得干净时触发。
答案 1 :(得分:1)
以下是我的工作,视图本身可以跟踪用户是否尝试修改数据。发生这种情况时,它可以通知演示者视图数据已更改,并且演示者可以对此事件执行操作以启用/禁用保存按钮。这是迄今为止我发现的最简单的解决方案,否则您必须对DTO / Data对象本身进行更改跟踪。
答案 2 :(得分:0)
您是否可以让所有控件在启用更改时自动回发,并调用_presenter.MarkDirty()或类似的方法。
或者您可以允许使用保存按钮,但如果对象是干净的,则使用无更改对话框或类似对象进行响应。
答案 3 :(得分:0)
我同意@Pace只有模型应该是脏的。
我只想在这里添加(因为这似乎是关于.net),您可以使用CSLA来实现您的模型,并且您可以免费获得IsDirty功能(以及许多其他功能)
<强>更新强>
CSLA不是关于业务层吗?
确实如此,但我认为IsDirty方法属于业务层。您谈到在DTO上实现IsDirty,但是当您这样做时,该对象不再是DTO(因为它不仅仅是传输数据)。
此外,你可以使用CSLA作为你的DTO和你的表示层之间的中间层,虽然如果你的意图只是使用IsDirty功能,这将是一个太多的开销。
重点是:当您开始将“功能”放入DTO时,我不明白为什么您不会从业务层中公开CSLA对象而不是简单的DTO。