c# – Code背后的动态多绑定
我在后面的代码中动态创建
WPF元素,对于我构建的Grid中的每一行,它由CheckBox和DynamicBoxes组成.需要的交互如下:
>如果一行中的所有TextBox都具有值0,请设置CheckBox 我能够使用以下代码完成最后一部分的第一部分: Binding setScoreToZeroIfIsNormalChecked = new Binding("IsChecked"); setScoreToZeroIfIsNormalChecked.Source = this.NormalCheckBoxControl; setScoreToZeroIfIsNormalChecked.Converter = m_NormalCheckBoxJointScoresConverter; tempJointScoreControl.JointScoreContainer.SetBinding(ContainerBase.SingleAnswerProperty,setScoreToZeroIfIsNormalChecked); 和转换器: public object Convert(object value,System.Type targetType,object parameter,System.Globalization.CultureInfo culture) { if (value is bool && targetType == typeof(Answer)) { if ((bool)value) { Answer answer = new Answer(); answer.Value = "0"; answer.DisplayValue = "0"; return answer; } else return null; } else { return null; } } 但是,在尝试创建另一个转换器来完成其他功能时,由于所有功能都基于CheckBox.IsChecked属性,因此我遇到了转换器相互踩踏的问题. 无论如何使用一个或两个多重绑定转换器完成上述所有操作?我真的很想避免创建一大堆事件并维护它们以便做到这一点. 解决方法
这相对容易.一切都应该解决CheckBox IsChecked属性.
原因很简单,这是一个双向属性.所以要么你可以修改它,要么CheckBox可以修改它. 那么你做什么,你使用MultiBinding,如下: MultiBinding multiBinding = new MultiBinding(); multiBinding.Converter = multiBindingConverter; multiBinding.Bindings.Add(new Binding("Text") { Source = txtbox1}); multiBinding.Bindings.Add(new Binding("Text") { Source = txtbox2}); multiBinding.NotifyOnSourceUpdated = true;//this is important. checkBox.SetBinding(CheckBox.IsCheckedProperty,multiBinding); 在你的multiBindingConverter中,你将object []值作为第一个参数,你需要将其转换为IList并迭代它并且&&做你的计算,如果你要么返回true / false.(IsChecked = true或false) 现在将CheckBox IsEnabled绑定到CheckBox IsChecked属性,并使用BooleanInverterConverter. (如果选中CheckBox,则应禁用它,反之亦然) 最后一步是让TextBoxes监听CheckBox的实际IsChecked属性. 所以,制作一个新的MultiBinding. MultiBinding multiBinding = new MultiBinding(); multiBinding.Converter = textboxMultiBindingConverter; multiBinding.Bindings.Add(new Binding("IsChecked") { Source = checkbox1}); multiBinding.Bindings.Add(new Binding("Text") { Source = textbox1}); multiBinding.NotifyOnSourceUpdated = true;//this is important. textbox1.SetBinding(TextBox.Text,multiBinding); textboxMultiBindingConverter中的想法是,如果value [0] == FALSE,则返回Text(value [1]);如果value [0] == TRUE,则返回“0”. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- swift – 无法使用类型'(String)’的参数列表调用’val
- 对C中的特定标题使用extern C关键字是否允许从void *转换为
- noSQL数据库相关软件介绍(大数据存储时候,必须使用)
- ruby-on-rails – PostGIS错误 – PG :: InternalError:ER
- FlexPaper+SWFTools 实现仿百度文库及一些小问题
- Openwrt 15.05.1增加对MT7620a NAND flash的支持
- 在使用Swift的App Receipt验证中返回代码21002
- postgresql – 避免在多台机器的SERIAL列中重复增加
- Oracle order by子句对NULL的排序
- iphone – 程序接收信号:“0”.数据格式化程序暂时不可用