GuruCode

Еще один блог про программирование

DependencyProperty. Свойство-зависимость.

Что такое DependencyProperty.

В .Net у элементов(control’ов) есть специальные свойства, которые называются свойства-зависимости. С помощью этих свойств можно влиять на стиль элементов, делать привязку данных(Binding), задавать анимацию, шаблоны и прочее. Для использования dependency property элемент должен быть унаследован от класса dependency object.
Задать свойство зависимость можно в XAML или в коде программы.
Что является свойством-зависимостью.
Для примера возьмем XAML-код:

В данном примере свойства Height и Content и есть dependency property.

Рассмотрим пример использования DependencyProperty при использовании паттерна MVVM.
Как известно, при использовании MVVM мы не используем code behind и не получаем прямого доступа к управлению элементами во View. Вместо этого мы используем DependencyProperty и Binding. Управление содержимым окна происходит во ViewModel путем изменения свойств, которые прописали в XAML-коде нашей View.
Итак, в нашем примере есть некоторое View, в котором присутствует объект ScrollViewer. Наша задача — в определенном месте сместить скролл бар вверх, либо вниз. Это может понадобиться при обновлении списка. Т.е. у вас есть некоторый список, по какому-то событию в него добавились элементы и вы бы хотели сместить скролл ниже, чтобы сразу видеть добавленные элементы. В случае программирования с использованием code behind мы бы могли получить доступ к размещенному ScrollViewer следующим образом:

В случае MVVM мы не используем code behind. Как же вызывать метод _scroll_viewer.ScrollToBottom()? Для этого нам необходимо создать DependencyProperty, при изменении которого во ViewModel будет вызываться метод _scroll_viewer.ScrollToBottom(). Чтобы это сделать создадим класс ScrollViewerHelper.

У нас есть класс, который может работать с контролом ScrollViewer. Теперь осталось его задействовать. Для этого изменим XAML-код во View.

Итак, осталось создать bool свойство во ViewModel с именем «MyPropertyInViewModel», при изменении которого произойдет вызов метода scrollViewer.ScrollToBottom().

Updated: 02.05.2016 — 10:18

2 комментария

Add a Comment
  1. Какой метод из ViewModel вызывается?

    1. Во ViewModel не нужно вызывать метод. Нужно сделать свойство-зависимость: bool MyPropertyInViewModel.

      При изменении MyPropertyInViewModel будет вызываться scrollViewer.ScrollToBottom(), т.к. мы сделали Binding:
      Т.е. чтобы сработал метод scrollViewer.ScrollToBottom() достаточно сделать так:
      MyPropertyInViewModel = true; или MyPropertyInViewModel = false.
      В XAML мы прописываем класс local:ScrollViewerHelper и его свойство AutoScroll, которое привязывается к свойству MyPropertyInViewModel во ViewModel.

      Теперь при изменении MyPropertyInViewModel будет вызываться метод AutoScrollPropertyChanged в классе ScrollViewerHelper, который уже вызовет scrollViewer.ScrollToBottom();

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

GuruCode © 2016 Frontier Theme