我的数据库中有一个二进制字段,很难在 UI 中使用单个“Is XXXX?”类型的复选框进行描述。我宁愿使用一对单选按钮(例如“Do it the Foo way”和“Do it the Bar way”),但现在表单上的所有其他字段都数据绑定到业务对象。我也想将这对单选按钮数据绑定到业务对象,但还没有想出一个好的方法来做到这一点。我可以将其中一个按钮绑定到该字段,这样,如果选择该按钮,则该字段设置为“true”,但是在选择另一个按钮时,会取消选择第一个按钮(也就是说,两个单选按钮正确配对) ),该字段的值不会更新以反映这一点。
我希望能够说
button1.DataBindings.Add(new Binding("checked", source, "useFoo"));
button2.DataBindings.Add(new Binding("checked", source, "!useFoo"));
但我很确定它运行时会抛出异常。有没有更简单的方法,或者我应该更多地考虑如何措辞单个复选框?我不想添加额外的函数来处理这么琐碎的事情......
ETA:评论者建议考虑使用下拉菜单(ComboBox)。我曾考虑过这一点,但如何将其数据绑定到数据库中的布尔字段/业务对象中的属性?如果我将 SelectedItem 绑定到 useFoo 属性,则 Items 集合中会包含什么内容?我是否必须仅添加“True”和“False”,或者我是否可以以某种方式添加一个键/值对对象,将显示的项目(“使用 Foo”/“不使用 Foo”)与其背后的布尔值联系起来?我很难找到这方面的文档。
关于答案:我最终使用的解决方案涉及修改业务对象——基本思想与 Gurge 发布的非常相似,但在阅读他的回复之前我单独想出了它。简而言之,我添加了一个单独的属性,它只是返回!useFoo
。一个单选按钮绑定到source.UseFoo
,另一个必然是source.UseBar
(新属性的名称)。确保新属性同时具有 getter 和 setter 非常重要,否则您最终会遇到非常奇怪的行为。
- 绑定
RadioButton
直接链接到您的布尔值(即,当该值是时检查true
).
-
添加一个事件处理程序CheckedChanged
对此事件RadioButton
看起来像下面这样:
private void radioButton_CheckedChanged(object sender, EventArgs e)
{
foreach (Binding b in ((Control)sender).DataBindings)
b.WriteValue();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)