Установить пользовательское сообщение об ошибке в ValidationRules в WPF - PullRequest
1 голос
/ 04 апреля 2020

Я все отлично настроил. Если я установлю некоторую строку в ErrorMessage, то она будет отображаться без ошибок. enter image description here

Я хочу установить ErrorMessage динамически / программно. что-то

MyValidation.ErrorMessage = "some new message";
username.Update() //something

Код XAML

<TextBox Margin="5" Name="userName">
   <TextBox.Text>
      <Binding RelativeSource="{RelativeSource Self}" Path="Tag" Mode="OneWayToSource" UpdateSourceTrigger="PropertyChanged">
         <Binding.ValidationRules>
            <local:MyValidation ErrorMessage="Static String" />
         </Binding.ValidationRules>
      </Binding>
   </TextBox.Text>
</TextBox>

C# Код класса

public class MyValidation : ValidationRule {
   public string ErrorMessage { get; set; }

   public override ValidationResult Validate(object value, CultureInfo cultureInfo) {
      if (ErrorMessage.Length > 0) {
         return new ValidationResult(false, ErrorMessage);
      }
      return ValidationResult.ValidResult;
   }
}

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Если вы дадите ValidationRule имя в разметке XAML:

<Binding.ValidationRules>
    <local:MyValidation x:Name="val" ErrorMessage="Static String" />
</Binding.ValidationRules>

... вы можете установить его свойство ErrorMessage напрямую, а затем просто явно обновить привязку:

val.ErrorMessage = "some new message";
userName.GetBindingExpression(TextBox.TextProperty)?.UpdateSource();
1 голос
/ 05 апреля 2020

Вы можете реализовать INotifyDataErrorInfo в своей модели представления. Реализуйте GetErrors(string), чтобы он возвращал различные сообщения об ошибках в зависимости от вашего состояния. Вы даже можете возвращать несколько сообщений одновременно, и они будут отображаться друг под другом.

Вот хороший учебник , но не стесняйтесь реализовать его самостоятельно. Помните, что нет единственно правильного подхода, а интерфейс дает вам большую свободу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...