2014-11-25 2 views
1

У меня есть два текстовых поля.Сравнение двух значений текстового поля и ошибки отображения в WPF

<TextBox Grid.Row="2" Grid.Column="1"Height="20" Name="OldTextBox" Text="{Binding OldName}" /> 

<TextBox Grid.Row="3" Grid.Column="1" Height="20" Name="NewTextBox" Text="{Binding NewName}" /> 

Если OldName и NewName отличаются друг от друга, я хочу показать оба значения текстового поля в красном цвете.

Я следую за MVVM. Лучше ли это делать в ViewModel или в любом простом стиле переднего плана?

ответ

3

Для выполнения такой проверки вы можете использовать интерфейс класса модели представления IDataErrorInfo.

class MyViewModel : IDataErrorInfo 
{ 
    public string NewName { get; set; } // Notify property change here 
    public string OldName { get; set; } // Notify property change here 
    public string Error { get; private set; } 
    public string this[string property] 
    { 
     get 
     { 
      switch (property) 
      { 
       case "OldName": 
       case "NewName": 
        return OldName != NewName ? "Names are different" : null; 
      } 
      return null; 
     } 
    } 
} 

Затем вам необходимо включить проверку в креплениями:

<TextBox Grid.Row="2" Grid.Column="1"Height="20" Name="OldTextBox" Text="{Binding OldName, ValidatesOnDataErrors=True}" /> 
<TextBox Grid.Row="3" Grid.Column="1" Height="20" Name="NewTextBox" Text="{Binding NewName, ValidatesOnDataErrors=True}" /> 

При необходимости, вы можете изменить цвет фона по стилизации ваши текстовые:

<Style TargetType="TextBox"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="True"> 
      <Setter Property="Background" Value="Red"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
Смежные вопросы