Как отобразить MessageBox при неправильном вводе и вернуть старое значение TextBox с помощью MVVM в WPF - PullRequest
2 голосов
/ 04 октября 2010

Я некоторое время использовал WPF и встроенные средства контроля валидации. Я читал отличную статью в codeproject, ссылка на которую приведена ниже

http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

У меня есть требование от одного из наших клиентов, которого я не смог добиться, используя MVVM в WPF.

Проблема заключается в следующем:

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

  1. выделите TextBox, предоставьте всплывающую подсказку
  2. отображать ошибку в MessageBox
  3. вернуть TextBox к его предыдущему значению

Например, когда загружен TextBox, он может иметь начальное значение, скажем, 10 , Затем пользователь вводит неверное значение, скажем «аа».

Теперь мне нужно отобразить MessageBox со словами «Неверное значение», а затем вернуть значение обратно в 10.

Существует множество статей и способов отображения ошибок в WPF, например, с помощью ErrorTemplate и так далее.

<Style TargetType="{x:Type TextBox}"> 
      <Setter Property="Validation.ErrorTemplate"> 
      <Setter.Value> 
      <ControlTemplate> 
          <DockPanel LastChildFill="True"> 
              <TextBlock DockPanel.Dock="Right" 
                  Foreground="Orange" 
                  FontSize="12pt"> 
                  !!!!
          </TextBlock> 
           <Border BorderBrush="Green" BorderThickness="1"> 
               <AdornedElementPlaceholder /> 
           </Border> 
          </DockPanel> 
      </ControlTemplate> 
      </Setter.Value> 
 </Setter> 
 <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="ToolTip" 
          Value="{Binding RelativeSource={RelativeSource Self}, 
          Path=(Validation.Errors)[0].ErrorContent}"> 
      </Setter> 
      </Trigger> 
 </Style.Triggers> 
 </Style> 

Но как мне вернуть значение и отобразить MessageBox. Я знаю, что это может быть отображено с помощью события в файле code-behind, но я не хочу писать какую-либо логику в моем файле code Я хочу добиться этой функциональности, используя MVVM

Пример иллюстрации будет очень полезен !!

Ответы [ 2 ]

1 голос
/ 04 октября 2010

ответ на ваш 2-й вопрос: создайте службу messagebox и просто вызовите ее из вашей модели представления. вы можете найти mvvm messageboxservices во всех рамках wpf. посмотрите на подпружиненный к примеру.

вещь отмены повторения, хм, она встроена в wpf, так что работает strg + z но я пока не знаю, как заставить его работать с mvvm:)

0 голосов
/ 11 октября 2010

Эй, люди, наконец, я решил проблему.Он основан на этом решении StackOverFLow

Решение очень простое.Я вызываю Валидатор о потере фокуса из TextBox.Валидатор возвращает мне результат валидации. На основании результата я могу предпринять некоторые действия.
Я использовал прикрепленное поведение для этого.Я написал триггер, который проверяет, является ли Validation.HasError истинным или нет.Если это правда, то это присваивает какое-то фиктивное значение моему прикрепленному свойству.При назначении у меня будет TextBoxBase под моим контролем.Используя это, я просто вызываю функцию Undo (), и это решает мою проблему.

...