WPF触发多个更新源

时间:2012-10-16 21:13:16

标签: wpf xaml idataerrorinfo

快速谷歌搜索并没有为此提供可行的副本。我希望有一个关于WPF错误模板和/或Binding的UpdateSourceTrigger属性的非常简单的问题。我是一个WPF n00b,所以请耐心等待。

我无法发布代码本身(与工作相关),但这里有基本的想法:

我在同一组中有一组标准的几个单选按钮。我有一个文本框"附加"对于其中一个,在TextBox.isEnabled与其中一个单选按钮的rb.isChecked数据绑定的意义上。

文本框使用PropertyChanged触发器验证数据错误。发生错误时,它会在自身周围绘制一个红色框。

我遇到的问题是"空文本框"当且仅当单选按钮启用了文本框时,才是错误条件。当我选择其他单选按钮时,我需要错误框消失,但它没有。

我的第一个想法是尝试将错误模板中的某些内容绑定到(HasError && IsEnabled),但我无法看到明确的方法。

我认为除了TextBox之外,可能会在UpdateSourceTrigger事件上触发FocusLost(通过PropertyChanged)。有没有办法做到这一点?

当然,欢迎使用替代解决方案。

1 个答案:

答案 0 :(得分:2)

只要调用PropertyChanged,验证就会重新运行。这意味着您可以通过提升PropertyChanged绑定的TextBox事件来强制重新验证。

由于您需要重新验证RadioButton.IsChecked更改的时间,您可以为PropertyChanged绑定TextBox绑定到RadioButton属性的设置器的属性class MyViewModel { public bool MyRadioButtonIsSelected { get { return myRadioButtonIsSelectedBacking; } set { myRadioButtonIsSelectedBacking= value; OnPropertyChanged("MyRadioButtonIsSelected"); // Force revalidation of MyTextBoxValue OnPropertyChanged("MyTextBoxValue"); } } public string MyTextBoxValue { get { return myTextBoxPropertyBackingField; } set { myTextBoxPropertyBackingField= value; OnPropertyChanged("MyTextBoxValue"); } } } 必然会。

示例:

<RadioButton
    Content="My Radio Button"
    IsChecked="{Binding MyRadioButtonIsSelected}" />
<TextBox 
    IsEnabled="{Binding MyRadioButtonIsSelected}"
    Text="{Binding MyTextBoxValue, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />

的Xaml:

{{1}}