2

编辑我正在添加额外的代码以进行澄清......

我在让 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”时,红色边框仍然存在。

我在某处缺少刷新属性吗???

4

0 回答 0