2009-10-23 6 views
1

У меня возникли проблемы с попыткой получить событие click для запуска после выполнения команды. Я стараюсь следовать стилю разработки MVVM.Кнопка C# Нажмите кнопку «События» после команды

Вот сценарий:

В моем приложении у меня есть сетка 2 по N кнопок, где N представляет собой динамически загружен набор кнопок (иногда это будет 2 х 2, иногда его 5 х 9 , Я не знаю). Первоначально все столбцы кнопок будут скрыты, за исключением первого столбца. При щелчке по первому столбцу выполняется выполнение команды, и воспроизведение анимации в анимации отображается и отображает определенные кнопки из второго столбца, в зависимости от того, какая кнопка была нажата в первом столбце. Например, нажатие верхней кнопки в первом столбце откроет первые четыре кнопки во втором столбце, тогда как нижняя кнопка в первом столбце откроет первые три кнопки во втором столбце.

Вот проблема:

Для каждой кнопки я поставил CommandParameter к каждой из кнопок в первой колонке. Когда команда запускается, данные обрабатываются, и в VM устанавливается свойство, в котором указывается, какая кнопка была нажата (я просто снова использую CommandParameter). Пока данные обрабатываются, я хочу отобразить следующий набор кнопок для пользователя. У меня есть событие click, которое берет CommandParameter из виртуальной машины и воспроизводит анимацию, чтобы показать правильные кнопки.

Однако проблема заключается в том, что WPF любит делать событие Click перед тем, как увольняется команда. Это проблема, поскольку свойство в VM, которое говорит, что нажата кнопка, не устанавливается!

Так что приносит мне пару вопросов ...

1) Есть ли способ, чтобы выполнить команду перед обжигом события?

2) Я делаю это правильно? : P

ответ

1

Вместо использования обработчика событий щелчка вы можете просто настроить DataTriggers на своих кнопках.

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

Приятная вещь в том, что ваш вид может быть выполнен полностью в XAML, а ViewModel просто устанавливает состояние (то есть: я в этом состоянии), и представление автоматически будет обновляться, поскольку привязка вызовет новый DataTrigger для запуска.

+0

Я попытался изменить все, чтобы использовать datatriggers и запускать привязку данных, а также пытаться переключить все на XAML. Проблема, с которой я сталкиваюсь, заключается в том, что все мои кнопки, которые я загружаю, выполняются программно, потому что 1) они динамически загружаются фоновым рабочим (это требуется, потому что мне нужно его асинхронно загружать и изображение кнопки загружается через Интернет) и 2) позиционирование кнопок выполняется в viewport3d с использованием Viewport2DVisual3D, случайно рассчитанного с использованием Random(). Есть ли способ сделать это только с помощью XAML и viewmodel? –

Смежные вопросы