Подпишись на наш Twitter

Быть в курсе появления новых статей!

В моей предыдущей статье я показал вам как начать использовать Caliburn Micro Framework в приложениях WPF. Caliburn Micro помогает реализовать приложения используя MVVM паттерн дизайна, чтобы получить четкое разделение между представлением и моделью данных. В этой статье мы рассмотрим, как Caliburn Micro помогает нам с привязкой данных и событиями. Мы построим в итоге приложение, проиллюстрированное в прошлой статье и с добавлением некоторого простого взаимодействия с пользователем и отображением данных.

Привязка данных

Мы начнем с приложения отображающего значения цифр, которые хранятся в модели. В классе AppViewModel, созданном в предыдущей статье, добавим свойство с названием Count, как показано во фрагменте кода ниже. Значение свойства хранится в поле _count которому мы присвоим значение по умолчанию равное 50. Как вы можете помнить с прошлого раза мы сделали класс AppViewModel наследником PropertyChangedBase, который предоставлен Caliburn Micro для уведомления о изменившихся свойствах. Вместо реализации INotifyPropertyChanged в каждой модели, вы можете просто вызвать метод NotifyOfPropertyChange внутри сеттера вашего свойства.

public class AppViewModel : PropertyChangedBase
{
  private int _count = 50;
 
  public int Count
  {
    get { return _count; }
    set
    {
      _count = value;
      NotifyOfPropertyChange(() => Count);
    }
  }
}

Далее мы изменим представление для отображения этого свойства. В AppView.xaml, добавьте TextBox в грид как сделано далее:


  

Теперь запустите приложение и увидите, что TextBlock отображает значение по умолчанию свойства Count.

Подождите... как? Я не помню установки и привязки для TextBlock для получения значения Count и всетаки TextBlock отображает правильные данные!

Обратите внимание, что я установил имя для TextBlock такое же, как и у свойства к которому мы хотели привязаться. Это небольшое соглашение, которое предоставляет Caliburn Micro. Для элементов, которые отображают данные, такие как TextBlock или TextBox, установив их имена совпадающими с именем свойства из модели данных это автоматически связывает их для вас.

Обработка событий

Далее давайте добавим кнопку, которая будет увеличивать отображаемое значение. Простой путь сделать это привязаться к событию Click для кнопки создав обработчик события в коде. Однако при использовании паттерна MVVM обычно лучший (но не абсолютно необходимый) способ избежать использования обработчика в коде, где вы можете. Так что давайте посмотрим как обработать событие в стиле Caliburn Micro. Во-первых, добавьте метод в AppViewModel для увеличения свойства Count как здесь:

public void IncrementCount()
{
  Count++;
}

Теперь добавьте кнопку в грид в AppView.xaml как тут:


  
  

Запустив приложение теперь и при нажатии на кнопку увеличивается значение счетчика, как и обещалось. И опять обратите внимание, что мы не сделали много работы для привязки к событию нажатия кнопки метода IncrementCount. Для некоторых элементов управления пользовательского интерфейса, такие как кнопки, вы можете просто установить имя контрола таким же, как и название метода для обработки. Caliburn Micro привязывает соответствующее событие к пользовательскому контролу к методу определенному в модели. В данном случае с кнопками, Caliburn Micro имеет дело с событием Click. (Вы также можете вручную указать к какому событию привязать какой метод, что мы рассмотрим в следующий раз).

Защита события

Когда Caliburn Micro автоматически привязывает событие Click к методу, он также ищет метод или свойство называющееся CanIncrementCount. Добавив метод или свойство CanIncrementCount, вы можете добавить дополнительную логику для определения, когда событие может быть обработано на основе текущего состояния модели. Давайте сделаем это сейчас, добавив следующее свойство в AppViewModel:

public bool CanIncrementCount
{
  get { return Count < 100; }
}

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

NotifyOfPropertyChange(() => CanIncrementCount);

Запустите приложение еще раз и увеличьте значение до 100. Как только лимит достигнут, кнопка становится недоступной, что не дает пользователю в дальнейшем увеличивать значение.

В этом примере мы рассмотрели несколько вещей, которые Caliburn Micro принимает на себя. Теперь вы можете просто и быстро использовать привязку данных, уведомление об изменении значения свойств, обработчики событий и защиту событий, в то же время реализовать надежное приложение MVVM, которое легко тестировать и поддерживать.

Вы можете загрузить полное решение для Visual Studio 2010 примера здесь. Используйте новые знания для добавления кнопки для уменьшения значения.

В следующей части серии статей, мы взглянем на более продвинутый сценарий обработки события с помощью Caliburn Micro, а именно передачу параметров события. Увидимся.

Оригинал: Caliburn Micro Part 2: Data Binding and Events




Дата публикации: 16.01.2012 13:00

Ярлыки: Caliburn.Micro, Data Binding, Events, MVVM, WPF