Обрабатываете много похожих реализаций ICommand? - PullRequest
2 голосов
/ 17 ноября 2011

Я работаю с MVVM и сталкиваюсь со следующей проблемой при использовании многих похожих команд.

Я хочу сделать много кнопок, которые используются для показа книг разных категорий.

Модель представляет собой некоторые данные о книге, скажем,

class book 
{
    string name;
    string author;
    .....
    .....
    string category;
}

Список книг сохраняется. Пользовательский интерфейс используется для просмотра книг разных категорий. Поэтому кнопки для каждой категории созданы. Например:

Buttons:

Comic
Social
Academic
Science
Leisure
Political
Cartoon
Gambling
Magazine
All

Есть около 10 кнопок, которые я должен создать. (9 категорий, 1 для просмотра все)

В MVVM каждая кнопка имеет свою команду. Исходя из этого, во ViewModel будет 10 команд. Тем не менее, кодирование 9 его очень похоже с единственным отличием в категории.

Итак, я хотел бы спросить, есть ли какие-либо предложения / методы, чтобы сделать его более экономящим код?

У меня есть идея. То есть объединить все команды в одну. Однако этот метод требовал, чтобы View (Xaml) передавал CommandParameter в каждой кнопке одной команде, чтобы различать разные категории. Это сделает XAML более сложным и увеличит уровень связи с помощью ViewModels / Business logic.

Итак, есть ли более лаконичный способ?

1 Ответ

2 голосов
/ 17 ноября 2011

Вы можете использовать DelegateCommand от Microsoft.Practices.Composite.Presentation.dll и использовать CommandParameter

    <Button Command="{Binding bookCmd}"  CommandParameter="Comic">
    <Button Command="{Binding bookCmd}"  CommandParameter="Music">
    <Button Command="{Binding bookCmd}"  CommandParameter="News">


private DelegateCommand<string> _bookCmd;

_bookCmd= new DelegateCommand<string>(ExecuteBookCmd);

private void ExecuteBookCmd(string category)
{
 //Have fun
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...