Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Шаг 5. Команды

Читайте также:
  1. II. Методы социально-педагогической деятельности руководителя временной лидерской команды (вожатого).
  2. IX. Комплекс знаний, необходимых руководителю лидерской команды (вожатому).
  3. XIII. Принципы деятельности руководителя лидерской команды (вожатого).
  4. Бонусы Команды
  5. Групповое управление ОР СУЗ 5-ой группы от ключа «5 ГРУППА». Эта группа ис­ключена из общего алгоритма группового управления. На нее команды ПЗ-1 и ПЗ-2 не воздействуют.
  6. Давать участникам команды полномочия действовать
  7. Девизы и названия команды

Добавим в приложение функциональности. Пусть некие читатели берут книги и возвращают. Соответственно, сделаем две кнопки — «Выдать» и «Забрать», меняющие количество имеющихся в наличии книг. Если книг не осталось (Count = 0), кнопка «Выдать» должна дизаблиться.

В MVVM не пишутся обработчики событий. Функции, которые нужно выполнять контролам, пишутся во ViewModel и биндятся к контролам точно так же, как поля. Только используется механизм команд.

Команда должна представлять из себя экземпляр класса, реализующего интерфейс ICommand. К счастью, MVVM Toolkit снова нам помог и сгенерил целых два таких класса - DelegateCommand для реализации команды без параметров и DelegateCommand<T> - для реализации команды с параметром типа T.

Мы параметры передавать не будем. Код во ViewModel будет таков: BookViewModel.cs

#region Забрать

private DelegateCommand getItemCommand;

public ICommand GetItemCommand
{
get
{
if (getItemCommand == null)
{
getItemCommand = new DelegateCommand(GetItem);
}
return getItemCommand;
}
}

private void GetItem()
{
Count++;
}

#endregion

#region Выдать

private DelegateCommand giveItemCommand;

public ICommand GiveItemCommand
{
get
{
if (giveItemCommand == null)
{
giveItemCommand = new DelegateCommand(GiveItem, CanGiveItem);
}
return giveItemCommand;
}
}

private void GiveItem()
{
Count--;
}

private bool CanGiveItem()
{
return Count > 0;
}

#endregion

Обратите внимание, что этот код добавляется в BookViewModel, а не в MainViewMode. Дело в том, что мы будем добавлять кнопки в ContentControl, DataContext-ом которого является именно BookViewModel.

С первой командой все ясно. Создали команду, и назначили ей в качестве действия метод GetItem, который и будет вызываться при ее активации. Со второй немного интереснее, но тоже просто. Помимо того, что она выполняет некоторое действие, она еще и может проверять с помощью метода CanGiveItem(), может она выполняться или нет.

В XAML-разметку нашей формы добавим следующее

<ContentControl Grid.Column="1" Content="{Binding BooksList}">
<ContentControl.ContentTemplate>
<DataTemplate>
<Border BorderBrush="Bisque" BorderThickness="1" Margin="10">
<StackPanel Margin="10">
<TextBlock Text="Название:"/>
<TextBox Text="{Binding Title,
UpdateSourceTrigger=PropertyChanged}"
Margin="0,0,0,10"/>

<TextBlock Text="Автор:"/>
<TextBox Text="{Binding Author,
UpdateSourceTrigger=PropertyChanged}"
Margin="0,0,0,10"/>

<StackPanel Orientation="Horizontal">
<Button Content="Выдать" Command="{Binding
GiveItemCommand}" Margin="10,0" />
<Button Content="Забрать" Command="{Binding
GetItemCommand}" Margin="10,0" />
</StackPanel>
</StackPanel>
</Border>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>

Вот и все. Мы получили требуемую функциональность. Количество экземпляров книги увеличивается и уменьшается, а когда их становится 0, кнопка «Выдать» дизаблится (благодаря упомянутому CanGiveItem).


Дата добавления: 2015-08-13; просмотров: 82 | Нарушение авторских прав


Читайте в этой же книге: Триггер, который позволяет применять изменения, основанные на состоянии нескольких свойств. | Шаг 2. Использование нестандартных команд. | Класс представления (View). | Класс модели представления (View Model). | Реализация INotifyCollectionChanged. | Создание представления, определенного как шаблон данных. | Краткие итоги | В паттерне MVVM инкапсулирует логику представления и данные для отображения (англ. яз.). | Интерфейс, предоставляющий базовую поддержку валидации данных и сообщения об ошибках | Шаг 4. View |
<== предыдущая страница | следующая страница ==>
Шаг 4. Редактирование| Создание ссылок на XAML файлы

mybiblioteka.su - 2015-2024 год. (0.006 сек.)