2014-11-06 51 views
1

MVVM(Model-View-ViewModel)模式通常用于WPF应用程序中,以便非常有效地使用数据绑定功能。带Windows窗体的MVVM

我在Windows Forms应用程序中使用了MVVM模式,该模式到目前为止效果很好。然而,在某些情况下,我有一个问题与Windows绑定窗体控件: 说我通过

dtpMyDateTimePicker.DataBindings.Add("Value", mViewModel, "CurrentDate") 

绑定一个标准的日期时间选择器我的视图模型的的currentdate属性的值属性,属性才会更新当控制失去焦点时。通过点击“箭头”符号来查看日期时间选择器的工作方式,您可以打开日历并滚动浏览月/年。虽然我想不断更新我的表单,当滚动浏览不同的日期时,数据绑定只会在我选择日期并关闭日历工具时更新我的​​viewModel的属性。

一个更简单的例子是数据绑定文本框的文本属性(设想一个搜索字段) - 我正在使用的数据绑定方法不允许在输入时不断更新我的表单。

很明显,我可以在窗体上实现控件的_ValueChanged事件,并手动更新ViewModel的属性。然而,由于我现在只使用单向数据绑定(ViewModel - > View)并需要在窗体中再次实现逻辑(更改事件),因此这会将整个魔术带出MVVM模式。

TLDR:所以基本上我正在寻找一种方法在Windows窗体应用程序中指定某种UpdateSourceTrigger。

你有什么建议如何做到“正确”?

预先感谢您!

回答

2

Windows窗体中的等效UpdateSourceTriggerDataSourceUpdateMode。您可以为一个单独的Binding指定此(并添加此绑定到DataBindings),或者您也可以通过DataBindings.Add()方法的另一个重载它接受第五个参数作为DataSourceUpdateMode指定此:

dtpMyDateTimePicker.DataBindings.Add("Value", mViewModel, "CurrentDate", true, 
             DataSourceUpdateMode.OnPropertyChanged);