Преимущество связывания?

Я не уверен, что полностью понимаю преимущество привязки. Например, если я хочу привязать строковое значение к TextBlock, мне нужно сделать следующее:

  • Создайте класс, который расширяет INotifyPropertyChanged
  • Добавьте строку в этот класс (скажем: MyString)
  • Расширьте метод set для MyString, чтобы он вызывал другой метод (скажем: OnPropertyChanged)
  • Создайте метод OnPropertyChanged для вызова события PropertyChangedEventHandler

Затем мне нужно создать новый экземпляр класса, установить мой TextBlock.DataContext, чтобы указать на этот класс, и, наконец, добавить бит XAML для привязки.

Может кто-то объяснить преимущество этого по простому настройке:

TextBlock.Text = MyString;

Спасибо!

3 ответа

Преимущество состоит в том, что вы можете изменять и отображать значение в нескольких местах без необходимости обновлять какой-либо метод для добавления другого назначения TextBlock каждый раз, когда значение изменяется. Любой новый элемент управления отображает только свойство, остальное автоматически.

Теперь, если вы действительно просто установите значение в одном месте и покажете его в одном элементе управления, тогда вы правы, там не так много.


  • Любые изменения в MyString не будут автоматически отражаться в вашем пользовательском интерфейсе.
  • Ваш код будет завален "когда это событие произойдет, обновите эти данные", поэтому вы будете писать свою собственную беспорядочную логику привязки данных для каждого вида.


Усиление использования привязки данных не особенно заметно для привязки TextBlock к статической строке.

Однако, если значение MyString изменяется во время выполнения приложения, оно становится намного более полезным - особенно в случае, когда объект, которому принадлежит это свойство, не знает TextBlock. Это разделение между пользовательским интерфейсом и базовым уровнем данных может быть создано с использованием шаблона проектирования, такого как MVVM.

Связывание данных также полезно для более сложных свойств, таких как элементы в элементе управления ListBox. Просто привяжите ListBox.Items к свойству типа ObservableCollection, и пользовательский интерфейс будет автоматически обновляться всякий раз, когда изменяется содержимое этой коллекции.

licensed under cc by-sa 3.0 with attribution.