Обновление данных и направление привязки

Ранее было отмечено, что привязка способна автоматически обновлять целевое свойство при изменении источника данных. Чтобы реализовать этот функционал, можно поступить одним из следующих способов:

1. Сделать свойство источника данных свойством зависимостей.

2. Генерировать при изменении источника событие Имя-СвойстваChanged.

3. Реализовать в источнике интерфейс INotifyPropertyChanged (пространство имён System.ComponentModel), содержащий событие PropertyChanged. Это событие нужно генерировать при изменении данных, указывая имя свойства.

Проведём модификацию класса Person, используя третий подход:

public class Person: INotifyPropertyChanged

{

private string _name;

private double _age;

public string Name

{

get { return _name; }

set { SetProperty(ref _name, value, "Name"); }

}

public double Age

{

get { return _age; }

set { SetProperty(ref _age, value, "Age"); }

}

public event PropertyChangedEventHandler PropertyChanged;

private void SetProperty<T>(ref T field, T value, string name)

{

if (!EqualityComparer<T>.Default.Equals(field, value))

{

field = value;

var handler = PropertyChanged;

if (handler!= null)

{

handler(this, new PropertyChangedEventArgs(name));

}

}

}

}

Для того чтобы изменения в целевом свойстве попадали в источник данных, нужно установить режим привязки в BindingMode.TwoWay или BindingMode.OneWayToSource. При необходимости можно также задать свойство привязки UpdateSourceTrigger – момент обновления источника данных. Если UpdateSourceTrigger установить в UpdateSourceTrigger.Explicit, требуется написать код, вызывающий для обновления метод UpdateSource() у объекта BindingExpression, связанного с элементом:

// tbxAge – это поле ввода, привязанное к свойству возраста

BindingExpression be =

tbxAge.GetBindingExpression(TextBox.TextProperty);

be.UpdateSource();


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: