Использование одной общей команды для работы с несколькими кнопками - PullRequest
3 голосов
/ 21 января 2012

Я создаю простое приложение Калькулятор. Я также учусь применять шаблон MVVM в своем приложении.

Я бы хотел, чтобы каждая из кнопок «Цифра» моего калькулятора связывалась с одной и той же Командой, где они будут отличаться только цифрой (Текст) кнопки, вызвавшей команду.

Например, когда нажата кнопка «1», я хотел бы получить уведомление об этом, извлечь «1» из свойства Отправителя и продолжить оставшуюся работу.

Это позволяет мне определять один метод вместо 10 различных обработчиков.

Это невозможно, насколько я видел во всех руководствах по MVVM до сих пор, поскольку привязка команд не предоставляет мне всей этой информации при привязке к фактическому методу, который будет обрабатывать щелчок.

Есть ли способ легко сделать то, что мне нужно?

Ответы [ 2 ]

5 голосов
/ 21 января 2012

Предполагая, что я понимаю, что вы пытаетесь сделать, вы можете использовать свойство CommandParameter, чтобы позволить различным кнопкам предоставлять значения для одной и той же команды. Например:

...
    <Button Content="1" Command="{Binding ButtonClickCommand}" CommandParameter="1"/>

    <!-- Or, bind directly to the button's content using RelativeSource, like so: -->
    <Button Content="2" Command="{Binding ButtonClickCommand}"                    
                        CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Content}"/>
...

И в методе делегата вашей команды:

private void ButtonClickCommandHandler(object parameter)
{
    switch(int.Parse(parameter.ToString()))
    {
        case 1:
        ...
        case 2:
        ...
    }
}
3 голосов
/ 21 января 2012

Просто укажите цифру как Button.CommandParameter. (Который передается как параметр метода ICommand.ExecuteCanExecute))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...