MVVM (ICommand) в Silverlight - PullRequest
       10

MVVM (ICommand) в Silverlight

6 голосов
/ 10 августа 2009

Пожалуйста, не судите строго, обсуждался ли ранее этот вопрос или на него косвенно ответили в огромных блогах о призмах и mvvm. В реализации WPF классов RelayCommand или DelegateCommand есть такой обработчик событий

/// <summary>
/// Occurs whenever the state of the application changes such that the result
/// of a call to <see cref="CanExecute"/> may return a different value.
/// </summary>
public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

но в подмножестве пространств имен SL нет класса CommandManager. И вот где я застрял. Я еще не нашел обходной путь для этого в принятии MVVM для SL (PRISM для меня пока так сложен). Различные простые приложения HelloWorldMVVM вообще не работают.

Заранее спасибо и извините за мой английский -)

Ответы [ 2 ]

5 голосов
/ 10 марта 2010

Silverlight 4.0 поддерживает интерфейс ICommand и, таким образом, обеспечивает инфраструктуру, подобную WPF.

5 голосов
/ 10 августа 2009

В Silverlight нет поддержки команд. Когда пользователь манипулирует элементами управления в вашем представлении, вам нужно будет написать код (например, обработчики событий), который изменяет модель представления в коде для вашего представления. Это может быть что-то простое, например, вызов метода в модели представления, когда пользователь нажимает кнопку в представлении. Используя PRISM, вы можете создавать вложенные свойства в XAML, чтобы избавиться от этих обработчиков событий, но если вы не хотите использовать PRISM, вы можете просто использовать обработчики событий.

Еще один аспект, который вам нужно будет обработать, - это изменение вида при изменении модели вида. В частности, вы захотите включить и отключить элементы управления в зависимости от состояния модели представления. Для этого вам нужно привязать свойство IsEnabled элемента управления к чему-либо в модели представления, которое отражает, разрешена ли определенная операция. Реализация пользовательских IValueConverter объектов, которые преобразуются в логические значения, часто полезны. Например, если ваша модель представления имеет свойство, которое представляет счетчик, и вы хотите, чтобы определенный элемент управления в представлении был включен только тогда, когда счетчик больше нуля, вы можете создать преобразователь значения, который преобразуется в true, когда число больше нуля и используйте этот преобразователь значения в привязке.

Если вы попытаетесь адаптировать пример приложения MVVM для WPF, вам придется избавиться от всех видов использования команд и заменить свой собственный код. Код в вашем примере не имеет смысла в Silverligt, но в WPF он участвует в процессе определения, включен ли элемент управления в представлении, виден и т. Д.

...