определить предыдущее значение текстового поля в его потерянном сосредоточенном событии?WPF - PullRequest
3 голосов
/ 21 июля 2010

У меня есть текстовое поле и на нем событие onlostfocus.

В методе lostfocus есть ли способ определить, действительно ли пользователь изменил значение в нем? то есть как я могу получить любое предыдущее значение в нем?

Спасибо

Ответы [ 4 ]

5 голосов
/ 21 июля 2010

Как и почти все остальное в WPF, это проще, если вы используете привязку данных.

Свяжите текстовое поле со свойством класса. По умолчанию привязки обновляют источник, когда связанный элемент управления теряет фокус, поэтому вам не нужно возиться с событием LostFocus. Затем у вас есть доступ как к новому значению, так и к значению, которое пользователь ввел в установщике свойств.

В XAML это выглядит так:

<TextBox Text="{Binding MyProperty, Mode=TwoWay}"/>

В классе это выглядит так:

private string _MyProperty;

public string MyProperty
{
   get { return _MyProperty; }
   set
   {
      // at this point, value contains what the user just typed, and 
      // _MyProperty contains the property's previous value.
      if (value != _MyProperty)
      {
         _MyProperty = value;
         // assuming you've implemented INotifyPropertyChanged in the usual way...
         OnPropertyChanged("MyProperty"); 
      }
   }
2 голосов
/ 21 июля 2010

Что мне приходит в голову, так это двухэтапный подход.Обработайте событие TextChanged в текстовом поле и отметьте его.Затем, когда появляется текстовое поле OnLostFocus, вы можете просто проверить свой флаг, чтобы увидеть, был ли текст изменен.

Вот фрагмент кода о том, как вы можете обработать отслеживание.

0 голосов
/ 27 июля 2010

Другой способ решить эту проблему с помощью привязки данных: связать TextBox.Text со свойством, которое содержит начальное значение, но использовать привязку с UpdateSourceTrigger=Explicit Затем, когда текстовое поле теряет фокус, вы можете проверить привязку, если источник ицелевые значения отличаются, используя этот фрагмент кода и оценивая полученное выражение BindingExpression: BindingExpression be = tb.GetBindingExpression(TextBox.TextProperty); Здесь можно найти еще немного кода: http://bea.stollnitz.com/blog/?p=41

0 голосов
/ 21 июля 2010

Сохраните оригинальное значение где-нибудь. Вы можете написать общий компонент для хранения значения, когда оно получает фокус, и сравнивать значение, когда оно теряет фокус. Я сделал это в ASP.NET, и он работает довольно хорошо.

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