0

快速谷歌搜索不会为此产生可行的副本。我有一个关于 WPF 错误模板和/或UpdateSourceTrigger绑定属性的非常简单的问题。我有点像 WPF n00b,所以请多多包涵。

我本身不能发布代码(与工作相关),但这是基本思想:

我在同一组中有一组标准的几个单选按钮。我有一个“附加”到其中一个的文本框,从某种意义上说,它TextBox.isEnabled是数据绑定到rb.isChecked其中一个单选按钮的。

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

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

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

我认为除了可能有效之外,还可能触发事件上的TextBox(via UpdateSourceTrigger) 。有没有办法做到这一点?FocusLostPropertyChanged

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

4

1 回答 1

2

PropertyChanged验证将在调用时重新运行。这意味着您可以通过引发绑定PropertyChanged事件来强制重新验证。TextBox

由于您需要重新验证何时可以为绑定到的属性在绑定到的属性的设置器上RadioButton.IsChecked引发更改。PropertyChangedTextBoxRadioButton

例子:

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");
       }
    }
}

xml:

<RadioButton
    Content="My Radio Button"
    IsChecked="{Binding MyRadioButtonIsSelected}" />
<TextBox 
    IsEnabled="{Binding MyRadioButtonIsSelected}"
    Text="{Binding MyTextBoxValue, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True}" />
于 2012-10-18T15:12:47.823 回答