【问题标题】:events to update controls - how to do it right?更新控件的事件 - 如何正确执行?
【发布时间】:2014-05-26 07:07:25
【问题描述】:

我有 2 个代表二进制数字的文本框。 我有控制每个文本框中某些位的控件(复选框和组合框)。 目前,当我更改控件中的值时,它会更改 TextBox 中的相关位。

我想在文本框中输入一个二进制数。
我希望其他控件(复选框、组合框、其他文本框)将根据文本框的新值进行更新。

我知道可以为每个控件创建一个获取相关位并由事件触发的方法,但由于在我的实际项目中我有 25 个文本框和许多复选框,因此很难实现。 我怎样才能做到正确?

【问题讨论】:

  • 太累了,无法做出正确的答案,其他人应该承担学分:p...实现一两个事件方法,使用“发送者”对象(您的方法将取决于这个发送者是TB 或 CB 或其他),这些事件将在 CheckedChanged 和 TextChanged 上,在那里你会说“将发送者的值应用于具有相同类型的每个其他控件”。这是一般的想法,您必须提供更多信息才能获得更准确的答案。
  • 您使用的是 MVVM 方法吗?是 WinForms 还是 WPF?

标签: c#


【解决方案1】:

我不知道您是否为模型使用数据库,如果是,那么您可以创建数据表并将所有文本框绑定到 DatatTable 中,方法是在 Text 属性上使用 DataBindings(它在文本框中可用属性)

如果您没有数据库模型,您可以将所有文本框绑定到某个自定义模型类(通过添加对象源)。你的类应该实现INotifyPropertyChanged,如下所述:http://msdn.microsoft.com/en-us/library/ms229614.aspx

我不确定 GUI 上的更新何时发生,我的意思是这是否会在键入时更新 gui 或当您将当前控件更改为另一个时...

【讨论】:

【解决方案2】:

实现这一点的好方法是拥有一个 WinForm 绑定到的模型 (ViewModel)。这意味着您有一个对象,该对象将具有与您的文本字段相对应的属性。每个文本字段都应该绑定到相应的模型属性,因此可以通过 PropertyChanged 事件获取更改。更改属性值的逻辑应该在模型级别而不是 UI 上实现和封装。这种方法的众多好处之一是,您可以在不涉及 UI 的情况下对模型和逻辑进行单元测试。

请务必查看以下主题,这将深入了解 MVVM 模式MVVM: Tutorial from start to finish?

它非常常用,是 UI 编程的最佳设计模式之一。但是,如果它与您的用例匹配,则由您决定。

【讨论】:

  • 是否可以将 MVVM 与 WinForms 一起应用?
  • 是的,这是可能的。 MVVM 是一种可以应用于各种技术的设计模式。但是,我必须承认它最适合 WPF。您可能会发现以下线程很有用,因为它解决了这个问题:stackoverflow.com/questions/595469/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多