Управление свойствами нескольких кнопок в ViewModel - PullRequest
0 голосов
/ 29 июля 2010

У меня есть 18 кнопок в сетке Uniform на моем главном окне WPF.Мне нужно изменить многие свойства и команды кнопки как при загрузке программы, так и во время работы.Другими словами, при первом запуске программы выбирается конфигурация, которая влияет на макет.Позже это может измениться в зависимости от того, как работает программа.Я пытаюсь объединить всю логику в ViewModel.Итак, простой вопрос - как лучше всего реализовать этот дизайн?

Несколько идей:

  • Можно использовать традиционные привязки.Это работает, за исключением того, что вы можете получить 100 из них.Кроме того, в каждом свойстве была бы уродливая логика - т. Е. Если config1, то фон красный, а если config2 или 3, то фон синий.

  • Может ограничить число привязок с помощью ValueConverters и CommandParameters.но тогда у вас есть еще более сложная логика свойств.

  • Может связываться со стилем кнопки.Это работает для упрощения настроек свойств, но в итоге вы получите кучу стилей для работы.Также не очень хорошо работает после загрузки программы (я не думаю, что вы можете изменить стиль после его применения).

  • Может иметь различную сетку Uniform (каждая с набором18 кнопок) для каждой конфигурации, а затем показать только выбранную.Это упрощает логику свойств, но портит XAML.

  • Может передать сами объекты Button в ViewModel.Не уверен, как реализовать этот плюс, я думаю, что это нарушает шаблон MVVM.Может быть, проще всего, если бы я знал, как это сделать.

Я не могу найти элегантное решение.Я уверен, что есть кое-что простое, что я скучаю.Любые идеи приветствуются.Спасибо.

1 Ответ

0 голосов
/ 30 июля 2010

Вот что я сделал в этом случае:

Поскольку у вас есть несколько свойств, которые вы хотите привязать к каждой кнопке, включая команду, я бы сделал отдельную маленькую ViewModel (MyButtonViewModel)для каждой кнопки, которая включает в себя свойства и команду.

Затем в первичной модели представления я создаю коллекцию (ObservableCollection<MyButtonViewModel>) моделей ваших представлений кнопок и заполняю ее с помощью простого цикла (или LINQ)) code.

Затем в представлении я бы объявил ItemsControl для использования ItemPanel из UniformGrid.Затем для ItemTemplate я бы определил кнопку для привязки к свойствам в MyButtonViewModel.

Простой, маленький и элегантный IMO.

Дайте мне знать, если вам нужно какое-либо разъяснение, B

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