Применение правила проверки к привязке для отображения результата проверки только в пользовательском интерфейсе - PullRequest
2 голосов
/ 16 декабря 2010

Я применяю правило проверки к привязке в текстовом поле. Я получил правильное подтверждение с точки зрения пользовательского интерфейса, в котором я вижу сообщение об ошибке на всплывающей подсказке и применяю шаблон ошибки (просто обычная красная граница).

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

Есть ли способ отобразить шаблон ошибки в пользовательском интерфейсе, не затрагивая связанный источник.

Мой код выглядит примерно так:

<TextBox Name="texBox">
      <TextBox.Text>
        <Binding Path="ProductCode" UpdateSourceTrigger="PropertyChanged">
          <Binding.ValidationRules>
            <jas:RegexValidationRule
              RegexText="^[A-Z]{3}\.[0-9]{3}$"
              ErrorMessage="Invalid product code.  (Examples: ABC.123  xyz.789)"
              RegexOptions="IgnoreCase"
              />
          </Binding.ValidationRules>
        </Binding>
      </TextBox.Text>

Ответы [ 2 ]

1 голос
/ 16 декабря 2010

Это происходит потому, что если в любой момент в процессе привязки возникает ошибка проверки или другой тип ошибки, процесс останавливается. Я думаю, вам нужно установить свойство ValidationStep до Обновленное значение

Пример:

 <jas:RegexValidationRule ValidationStep="UpdatedValue"
              RegexText="^[A-Z]{3}\.[0-9]{3}$"
              ErrorMessage="Invalid product code.  (Examples: ABC.123  xyz.789)"
              RegexOptions="IgnoreCase"
              />

Пожалуйста, проверьте раздел " Процесс проверки " в Обзор привязки данных . Это даст вам хороший обзор того, что вы хотите сделать

0 голосов
/ 16 декабря 2010

Вместо этого вы можете попробовать заглянуть в IDataErrorInfo.Затем вы получите подтверждение в своем классе поддержки (ViewModel), чтобы текст в отображаемом текстовом поле был синхронизирован со свойством поддержки.В вашем случае это будет выглядеть примерно так

<TextBox Name="texBox"> 
    <TextBox.Text> 
        <Binding Path="ProductCode" UpdateSourceTrigger="PropertyChanged"/>
    </TextBox.Text>
</TextBox>

В классе поддержки datacontext

public class YourClass : IDataErrorInfo 
{
    //...

    #region IDataErrorInfo Members
    public string Error
    {
        get { throw new NotImplementedException(); }
    }

    public string this[string columnName]
    {
        get
        {
            string result = null;
            if (columnName == "ProductCode")
            {
                // Do your Regex Validation.
                if (regexValidationFailed)
                {
                    result = "Validation Error Text/Tooltip";
                }
            }
            if (columnName == "SomeOtherProperty)
            //...

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