таким образом в классических примерах MVVM я видел, что определения DataTemplate используются для отображения Моделей Представления на Представления, что стандартный путь состоит в том, чтобы сделать это в Легкой платформе MVVM, и где отображения должны быть расположены? Следующее является примерами того, что я делаю теперь и о чем я говорю, смешиваемость важна для меня!
Главное окно:
<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
x:Class="STS2Editor.MainWindow"
Title="{Binding ApplicationTitle, Mode=OneWay}"
DataContext="{Binding RootViewModel, Source={StaticResource Locator}}">
<Window.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Skins/ApplicationSkin.xaml" />
<ResourceDictionary Source="Resources/ViewMappings.xaml" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Window.Resources>
<Grid>
<ContentControl Content="{Binding ApplicationManagementViewModel}" HorizontalAlignment="Left" VerticalAlignment="Top"/>
</Grid>
</Window>
В вышеупомянутом коде мой класс RootViewModel имеет экземпляр класса ApplicationManagementViewModel с тем же именем свойства:
public ApplicationManagementViewModel ApplicationManagementViewModel {get {...} set {...} }
Я ссылаюсь на ResourceDictionary "ViewMappings.xaml", чтобы указать, как моя модель представления представлена как представление.
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:STS2Editor.ViewModel">
<DataTemplate DataType="{x:Type local:ApplicationManagementViewModel}">
<local:ApplicationManagementView/>
</DataTemplate>
</ResourceDictionary>
я должен делать вещи как это использование ViewModelLocator? что относительно наборов моделей представления?
Используемый вами метод (с неявно типизированными шаблонами данных) работает нормально в WPF, но, к сожалению, не работает в Silverlight. Это одна из причин, по которой я предпочитаю использовать более явный метод, который работает в обоих мирах.
Кроме того, неявно типизированные шаблоны данных могут немного сбивать с толку, потому что не всегда ясно, откуда берется шаблон. Иногда это может сделать работу интегратора очень сложной, особенно для небольших изменений в пользовательском интерфейсе (был там, сделал это :)
Нет никаких обязательств использовать ViewModelLocator в MVVM Light, это просто способ, который работает ну и довольно легко понять (для людей, читающих код, не знакомых с тонкостями WPF / SL). В конце концов, это во многом вопрос предпочтений, но в последнее время, похоже, набирает популярность шаблон ViewModelLocator (см., Например, этот пост, где общий ViewModelLocator используется вместе с MEF).
http://www.johnpapa.net/simple-viewmodel-locator-for-mvvm-the-patients-have-left-the-asylum/
Наконец, позвольте мне добавить, что я не очень доволен текущая реализация ViewModelLocator в MVVM Light, и я хочу предложить гораздо более общее решение в следующей версии.