【发布时间】:2013-01-04 23:52:27
【问题描述】:
我有几个TextBoxes 绑定到一个CheckBox。
这是与之相关的逻辑:
- 如果选中
Checkbox,它将覆盖关联TextBoxes中的任何现有文本并将其设为'0'++ - 如果所有
TextBoxes的得分均为“0”,则CheckBox应该 被禁用并被选中。 - 如果
TextBoxes中的任何一个从'0'改变,它将变为 已启用但未选中。
++ *注意:* 需要注意的是,TextBox 的值是否为“C”。
好的,所以我遇到的问题是当关联的TextBoxes 之一的值为“C”时实现上述警告。我想要发生的是循环遍历TextBoxes 并检查是否有任何得分为“C”。如果找到,则向用户显示警告消息,确认他们是否要继续。如果选择“是”,所有相关分数将被覆盖为“0”。如果选择否,则应取消Checked 事件。
为此,我为CheckBox.PreviewMouseDown 和CheckBox.Checked 事件添加了事件侦听器。这是我的CheckBox.PreviewMouseDown 事件监听器的代码:
private void NormalCheckBoxControl_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
CheckBox normalCheckBox = (CheckBox)sender;
bool showCorrespondingScoreWarningMsg = false;
//Get a Row to loop through the AssociatedAdqScore controls for each
ScoreControl tempScoreControl = new ScoreControl();
foreach (ScoreControl score in this.ScoreControlList)
{
if (score.ScoreTextBox.Text == "C")
{
showCorrespondingScoreWarningMsg = true;
}
}
if (showCorrespondingScoreWarningMsg)
{
MessageBoxResult msgResult = InformationBox.Show("WARNING: Proceeding will remove corresponding 'C' scores. Continue?", "Continue?", ButtonStyle.YesNo, IconStyle.Question);
if (msgResult == MessageBoxResult.No)
{
e.Handled = true;
}
}
}
This works if the user selects 'No,' however the issue I'm having is that when choosing 'Yes,' the CheckBox.Checked event still does not get fired.如果if (msgResult == MessageBoxResult.Yes),我尝试手动设置CheckBox.IsChecked = true;,但这会破坏绑定,因此这不是一个可行的解决方案。
如果用户选择“是”,我有什么办法可以解决此问题并继续 NormalCheckBoxControl_Checked(object sender, RoutedEventArgs e) 事件?
【问题讨论】:
-
为什么不将
CheckBox的IsChecked属性绑定到某个属性?这样,当您将CheckBox.IsChecked绑定到该属性时,您只需在TextBox条件与您想要的匹配时更改该属性,当您更改该属性时,它会自动为您检查/取消选中您的CheckBox。