编辑我正在添加额外的代码以进行澄清......
我在让 IDataErrorInfo 错误指示器显示在最初创建为“Collapsed”的控件上时遇到问题,然后使用 DataTrigger 使其可见。
有一个绑定到查找值的 ComboBox 控件,它显示三行...“现金”、“信用卡”和“支票”。我有两个分别绑定到“CreditCardCode”和“CheckNumber”的 TextBox 控件。
TextBox 控件设置了一个 DataTrigger 以使它们仅在选择相关的 ComboBox 值时才可见。如果相关的 TextBox 没有值,数据错误逻辑将显示错误。
这是组合框和文本框的 XAML:
<ComboBox IsEditable="False"
IsSynchronizedWithCurrentItem="False"
SelectedItem="{Binding Path=PaymentType}"
ItemsSource="{Binding Source={StaticResource paymentTypeLookup}}"
DisplayMemberPath="{Binding PaymentTypeCode}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=PaymentTypeCode,
ValidatesOnDataErrors=True}" />
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ComboBox>
<TextBox Name="CCCodeText"
Text="{Binding CreditCardCode, ValidatesOnDataErrors=True,
ValidatesOnExceptions=True, NotifyOnValidationError=True}" >
<TextBox.Style>
<Style TargetType="TextBox">
<Setter Property="TextBox.Visibility" Value="Collapsed" />
<Style.Triggers>
<DataTrigger Binding="{Binding ElementName=PaymentComboBox,
Path=SelectedItem.PaymentTypeCode}"
Value="CC_SWIPE">
<Setter Property="TextBox.Visibility"
Value="Visible" />
</DataTrigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox>
这是 PaymentType 对象的代码
public virtual PaymentType PaymentType
{
get { return _paymentType; }
set
{
if (!ReferenceEquals(_paymentType, value))
{
var previousValue = _paymentType;
_paymentType = value;
FixupPaymentType(previousValue);
NotifyPropertyChanged("PaymentType");
OnPaymentTypeChanged(value);
}
}
}
private PaymentType _paymentType;
这是 OnPaymentTypeChanged() 函数:
void OnPaymentTypeChanged(PaymentType value)
{
errors.Remove("CheckNumber"); //Avoid Dupes
errors.Remove("CreditCardCode"); //Avoid Dupes
if (this.PaymentType != null)
{
if (value.PaymentTypeCode == "CHECK" &&
(this.CheckNumber == String.Empty || this.CheckNumber == null))
errors.Add("CheckNumber", "Check Number required");
else if (value.PaymentTypeCode == "CC_SWIPE"
&& (this.CreditCardCode == String.Empty ||
this.CreditCardCode == null))
errors.Add("CreditCardCode", "Credit Card Code required");
}
}
如果 ComboBox 在窗口首次显示时设置为“Credit Card”(并且 CCCodeText 控件可见),则默认红色边框显示正常。但是,如果我将 ComboBox 的值更改为“Check”,并且出现 CheckTextBox 控件,则它缺少红色边框。
当我将 ComboBox 改回“Credit Card”时,红色边框仍然存在。
我在某处缺少刷新属性吗???