【发布时间】:2011-01-17 01:32:44
【问题描述】:
我正在遵循Martin Fowler 建议的presentation model 设计模式,用于我在 Windows 窗体项目中的 GUI 架构。
"Presentation Model 的本质是一个完全独立的类,它表示 UI 窗口的所有数据和行为,但没有任何用于在屏幕上呈现该 UI 的控件。视图然后简单地将演示模型的状态投影到玻璃上......” - Martin Fowler
除了将 RadioButtons 数据绑定到 Data/Domain 对象上的属性这一问题之外,我发现这个概念非常流畅且易于理解。
假设我有一个带有三个单选按钮的 Windows 窗体,将一些“模式”选项描述为 -
- 自动
- 手册
- 导入
如何使用数据/域对象的布尔属性将数据绑定到这些按钮?我尝试了很多方法,但无济于事。例如,我想编写如下代码 -
rbtnAutoMode.DataBindings.Add("Text", myBusinessObject, "IsAutoMode");
rbtnManualMode.DataBindings.Add("Text", myBusinessObject, "IsManualMode");
rbtnImportMode.DataBindings.Add("Text", myBusinessObject, "IsImportMode");
数据/域对象上应该有第四个属性,如“SelectedMode”,最后应该描述一个单一的值,如“SelectedMode = Auto”。当“IsAutoMode”、“IsManualMode”或“IsImportMode”中的任何一个发生更改时,我正在尝试更新此属性,例如通过属性设置器。我在我的数据/域对象上实现了 INotifyPropertyChanged,因此,更新任何数据/域对象属性会自动更新我的 UI 控件,这不是问题。
在 StackOverflow 问题 How do I use databinding with Windows Forms radio buttons? 中有一个很好的绑定两个单选按钮的例子,但是我在用三个按钮实现相同的时候缺少链接。我的单选按钮行为非常不稳定。
我希望我能够合理地解释它。我实际上很着急,无法在帖子上发布详细的代码,但感谢您在这方面的任何帮助。
有一个简单的方法可以解决这个问题,方法是公开一个类似的方法 -
public void SetMode(Modes mode)
{
this._selectedMode = mode;
}
可以从 UI 单选按钮的“CheckedChanged”事件中调用,并在业务对象上完美设置“SelectedMode”,但我需要扩展限制以验证这是否可以通过 DataBinding 完成。
【问题讨论】:
标签: winforms data-binding radio-button