Если у меня есть форма с привязкой к данным, как узнать, изменил ли ее пользователь (либо введя текст в текстовое поле, либо выбрав элемент в поле со списком)? Я пытался подключиться к событию «TextChanged» моего текстового поля, но проблема в том, что когда моя форма участвует в привязке данных, срабатывает событие «TextChanged», преждевременно помечая мою форму как «грязную».
Как я могу пометить форму/поле как грязное, если оно привязано к данным?
Ответы (4)
попробуй реализовать
public partial class Window1 : INotifyPropertyChanged
а потом
public event PropertyChangedEventHandler PropertyChanged;
public string UserName
{
get { return _UserName; }
set { if (value != _UserName)
{
_UserName = value;
OnNotifyPropertyChanged("UserName");
}}
}
private void OnNotifyPropertyChanged(string property)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
и привязка данных, как
<TextBox Text="{Binding UserName}"/>
Реализует ли ваш класс модели INotifyPropertyChanged? Если это так, вы можете добавить обработчик события PropertyChanged в класс и наблюдать за изменением рассматриваемого свойства.
Если вы не реализовали INotifyPropertyChanged, может быть, механизм, который вы используете для уведомления уровня пользовательского интерфейса об обновлениях, можно было бы использовать и здесь?
Когда вы впервые отображаете страницу, сохраните значения формы в массиве, когда сработает событие TextChanged, сравните с тем, что у вас уже есть, если это другая грязная форма.
--> http://www.mishainthecloud.com/2009/07/simple-dirty-tracking-for-winforms-in-c.html.
Я знаю, что это немного поздно, но мне нравится такой подход :) Инкапсулированное совершенство.
После привязки элементов управления вызовите SetAsClean(). Вызов этого метода, вероятно, можно было бы инкапсулировать в том же классе грязного отслеживания, обрабатывая некоторые события BindingSources.