Передача управления в качестве параметра команды в Silverlight и MVVM Light - PullRequest
0 голосов
/ 04 июля 2011

Я пытаюсь разобраться в MVVM и шаблоне проекта на основе навигации в SL4.В данный момент я пытаюсь переместить обработчик события ContentFrame_Navigated в ViewModel.По сути, этот обработчик событий проверяет каждую кнопку гиперссылки в строке меню на текущей странице и соответствующим образом корректирует стиль.Для этого мне нужно передать EventArgs, а также другой объект.Я вижу, что у MVVM Light есть бит PassEventArgsToCommand, но как насчет передачи другого объекта / элемента управления?В данном случае это StackPanel, на которой размещен список гиперссылок пунктов меню.Я просто разбираюсь с концепцией MVVM, какова лучшая практика в этом случае?

Приветствия, Дэни.

Ответы [ 2 ]

0 голосов
/ 05 июля 2011

С MVVM вы должны думать более абстрактно. Вы не имеете дело со списком элементов HyperLink, но со списком целей навигации. То есть Вы должны отделить презентацию (элементы HyperLink) от данных (URL, заголовок, выбранный элемент или нет и т. д.). Теперь вы храните данные в списке на вашей ViewModel (обычно вы видите эти данные как ViewModel ваших гиперссылок и называете их соответственно). Элементы хранятся в коллекции ObservableCollection, так что вы можете отслеживать изменения, если элемент добавлен и т. Д.

Для отображения этого списка вы можете использовать класс, унаследованный от ItemsPresnter (например, ListBox), и использовать привязку для установки свойств. Теперь перейдя на страницу, вы можете установить свойство IsSelected соответствующего элемента в списке, сбросив все остальные свойства IsSelected.

Поскольку целевые объекты навигации можно рассматривать как глобальную коллекцию, вы также можете держать ее в свойстве ViewLocator, чтобы все виды и ViewModel могли получить доступ к этому списку, а настройка IsSelectedProperty применима ко всем представлениям. Эта глобальная коллекция представляет ваше состояние навигации.

И, кстати, атрибуты EventToCommand, RelayCommand и Command поддерживают только один параметр. Кроме того, из своего опыта я могу посоветовать вам, что не рекомендуется (хотя вы, очевидно, можете это делать) смешивать объекты View, такие как EventArgs или элементы, и вашу ViewModel.

0 голосов
/ 04 июля 2011

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

...