Панорамный Windows Phone Phone с дизайном MVVM
Пожалуйста, помогите с проблемой дизайна / понимания MVVM.
Учитывая, что у нас есть приложение для Windows Phone со следующей структурой интерфейса:
MainPage.xaml body:
<views:PanoramaView/>
DataContext is set via MVVM Light view-model locator to a static MainViewModel class instance.
Views / PanoramaView.xaml body:
<UserControl.DataContext>
<ViewModels:PanoramaViewModel/>
</UserControl.DataContext>
<StackPanel x:Name="LayoutRoot">
<controls:Panorama Background="{Binding PanoramaBackgroundBrush}"
ItemsSource="{Binding PanoramaItems}"
ItemTemplate="{StaticResource panoramaItemTemplate}"
/>
</StackPanel>
В этот момент я наткнулся на вопрос: что мне делать, если я хочу, чтобы все мои PanoramaItems состояли из разных пользовательских элементов управления? Если я определю шаблон элемента панорамы, я обрекаю их всех на одинаковые. Но я намерен иметь несколько совершенно разных предметов панорамы. Я хотел бы иметь класс (предположительно PanoramaViewModel
), который позволил бы мне контролировать, какие элементы панорамы отображаются в данный момент времени.
Поэтому у меня должен быть способ придерживаться MVVM, но иметь возможность создавать новые виды (элементы панорамы) и вставлять их в PanoramaItems
коллекция моего PanoramaViewModel
, Где и как мне это сделать?
2 ответа
Вы должны определить ключ ресурса, чтобы определить шаблон данных с установщиком представления для элемента представления, отображаемого для различных типов классов модели представления, и получить классы VM из общего базового класса (PanoramaViewModel, т.е.)
В WPF я должен был использовать DataTemplateSelector, чтобы обойти мою проблему дизайна. Поскольку приложения для Windows Phone больше похожи на Silverlight, я могу реализовать это сам. Хороший пример того, как в этой статье и этой ветке форума silverlight.net.