问题:在更改进入视图模型之前,有没有办法拦截UI中的更改?具体来说,我需要一些适用于ComboBox
的东西。有很多方法可以检测UI中的某些内容已经发生变化,然后通过更改它来“取消”(例如:this one或this one),但这些都有这两个缺点之一:
背景:我的表单中包含ComboBox
Foos
个Foo
。用户应该可以随意更改选定的Foo
(一旦选择Foo
他们不应该被锁定以保留它),但更改选定的Foo
可能会使其他一些设置无效在用户选择的视图模型中。用户将收到一些警告,可能是一个消息框,上面写着“你确定要更改Foo吗?”,选择不更改Foo
应取消更改。更改所选NotifyPropertyChanged(Foo)
的值然后将其更改回来的问题是,应该将用于决定需要失效的内容的逻辑挂钩到设置VM后备属性(可能是 public void paint(Graphics g)
{
g.drawLine(0, 0, 100, 100);
}
或只是它旁边的其他设置无效,无论是否取消了更改。
解决我问题的正交问题:
答案 0 :(得分:0)
没有人说您的视图模型必须立即将每个更改转发给模型。
我会触发“你真的想改变这个吗?”来自视图模型的对话框,如果用户回答“是”,则更改模型(并在必要时使其他属性无效),否则还原视图模型中的更改并使其无效。