我在后面的代码中动态创建 WPF 元素,并且对于Grid
我正在构建的每一行,它由一个CheckBox
和一个动态数字组成TextBoxes
。需要的交互如下:
- 如果
TextBoxes
一行中的所有值都为0
,则将该CheckBox
IsChecked
属性设置为true
并禁用它。 - 如果其中之一
TextBoxes
从 更改0
,则启用CheckBox
并设置IsChecked
为false
。 - 如果用户单击
CheckBox
,则将所有关联设置TextBoxes
为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
属性。
无论如何使用一个或两个多重绑定转换器来完成上述所有操作?我真的很想避免为了做到这一点而不得不创建一大堆事件并维护它们。