пятница, 13 марта 2009 г.

Команды и MVVM (приложение 1)

Решил все-таки поподробнее расписать варианты как все будет выглядеть при использовании.

При использовании связывания через команду (BindToICommand в примере).

В xaml просто прописываем свой биндинг:
  1.     <UserControl.CommandBindings>
  2.         <CommandBinding:DataContextCommandBinding Command="ApplicationCommands.Save" />
  3.     </UserControl.CommandBindings>
* This source code was highlighted with Source Code Highlighter.

Соотв. задается только DataContextCommandBinding должен будет в презентере (что в данном случае является синонимом DataContext) найти команду, обслуживающую ApllicationCommand.Save.

В презентере все выглядит примерно так

  1.   public class BindToICommandVM : INotifyPropertyChanged
  2.   {
  3.     public DataContextCommand Save { get; set; }
  4.  
  5.     public BindToICommandVM()
  6.     {
  7.       // Какие-то действия в конструкторе
  8.       Save = new DataContextCommand
  9.             {
  10.               BoundCommand = ApplicationCommands.Save,
  11.               CanExecuteDelegate = x => CanExecute,
  12.               ExecuteDelegate = x =>
  13.                          {
  14.                            LogItems.Add(Text);
  15.                            Text = "";
  16.                          }
  17.             };
  18.     }
  19.     // Ну и что там еще у него есть
  20.   }
* This source code was highlighted with Source Code Highlighter.

Т.е. на каждую команду надо заводить свойство типа DataContextCommand и в конструкторе (или где-нибудь еще на раннем этапе) прописывать ему делегаты для Execute и CanExecute и командую, по которой DataContextCommandBinding поймет что это реализация именно той команды, которой ему надо. Естественно можно использовать и много команд в презентере и несколько DataContextCommandBinding.


Комментариев нет:

Отправить комментарий

Постоянные читатели