【问题标题】:MVVM with Windows Forms带有 Windows 窗体的 MVVM
【发布时间】:2015-01-02 17:46:34
【问题描述】:

MVVM (Model-View-ViewModel) 模式通常用于 WPF 应用程序中,以提供一种非常有效地使用数据绑定功能的便捷方式。

我在 Windows 窗体应用程序中使用 MVVM 模式,到目前为止效果很好。但是在某些情况下,我遇到了 Windows 窗体控件上的数据绑定问题: 假设我通过

将标准日期时间选择器的 Value 属性绑定到我的 ViewModel 的 CurrentDate 属性
dtpMyDateTimePicker.DataBindings.Add("Value", mViewModel, "CurrentDate")

,该属性仅在控件失去焦点时更新。查看日期时间选择器的工作原理,通过单击“箭头”符号,您可以打开日历并滚动查看月/年。虽然我想在滚动不同日期时不断更新我的表单,但数据绑定只会在我选择日期并关闭日历工具时更新我的​​ viewModel 的属性。

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

显然我可以在我的表单上实现控件的 _ValueChanged 事件并手动更新 ViewModel 的属性。然而,这消除了 MVVM 模式的全部魔力,因为我现在只使用单向数据绑定(ViewModel -> View)并且需要再次在表单中实现逻辑(更改事件)。

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

您对如何“正确”执行此操作有什么建议吗?

提前谢谢你!

【问题讨论】:

    标签: wpf vb.net winforms mvvm data-binding


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 2012-11-02
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多