快速谷歌搜索并没有为此提供可行的副本。我希望有一个关于WPF错误模板和/或Binding的UpdateSourceTrigger
属性的非常简单的问题。我是一个WPF n00b,所以请耐心等待。
我无法发布代码本身(与工作相关),但这里有基本的想法:
我在同一组中有一组标准的几个单选按钮。我有一个文本框"附加"对于其中一个,在TextBox.isEnabled
与其中一个单选按钮的rb.isChecked
数据绑定的意义上。
文本框使用PropertyChanged
触发器验证数据错误。发生错误时,它会在自身周围绘制一个红色框。
我遇到的问题是"空文本框"当且仅当单选按钮启用了文本框时,才是错误条件。当我选择其他单选按钮时,我需要错误框消失,但它没有。
我的第一个想法是尝试将错误模板中的某些内容绑定到(HasError && IsEnabled)
,但我无法看到明确的方法。
我认为除了TextBox
之外,可能会在UpdateSourceTrigger
事件上触发FocusLost
(通过PropertyChanged
)。有没有办法做到这一点?
当然,欢迎使用替代解决方案。
答案 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}}