在*到达视图模型之前截取UI更改*

时间:2016-12-15 11:29:15

标签: c# wpf mvvm combobox

问题:在更改进入视图模型之前,有没有办法拦截UI中的更改?具体来说,我需要一些适用于ComboBox的东西。有很多方法可以检测UI中的某些内容已经发生变化,然后通过更改它来“取消”(例如:this onethis one),但这些都有这两个缺点之一:

  1. 基础模型已更改,然后更改回来,而不是实际取消更改。
  2. 取消发生在视图模型中,因此取消的UI也必须放在视图模型中。
  3. 背景:我的表单中包含ComboBox FoosFoo。用户应该可以随意更改选定的Foo(一旦选择Foo他们不应该被锁定以保留它),但更改选定的Foo可能会使其他一些设置无效在用户选择的视图模型中。用户将收到一些警告,可能是一个消息框,上面写着“你确定要更改Foo吗?”,选择不更改Foo应取消更改。更改所选NotifyPropertyChanged(Foo)的值然后将其更改回来的问题是,应该将用于决定需要失效的内容的逻辑挂钩到设置VM后备属性(可能是 public void paint(Graphics g) { g.drawLine(0, 0, 100, 100); } 或只是它旁边的其他设置无效,无论是否取消了更改。

    解决我问题的正交问题:

    1. 我是否试图以不应该弯曲的方式弯曲MVVM范例?我是否应该寻找一种将取消UI移动到UI并在视图模型中保留取消行为的方法?
    2. 断言“改变然后改变不起作用”是不准确的?在发生变化之后是否会在某个地方挂钩然后开始(或抑制)失效?

1 个答案:

答案 0 :(得分:0)

没有人说您的视图模型必须立即将每个更改转发给模型。

我会触发“你真的想改变这个吗?”来自视图模型的对话框,如果用户回答“是”,则更改模型(并在必要时使其他属性无效),否则还原视图模型中的更改并使其无效。