Я экспериментирую с шаблоном MVVM, в частности я пытаюсь определить, как я собираюсь работать с отдельными библиотеками классов, которые содержат представления (и модели представлений). Глядя на сеть, кажется, что это делается по-разному как с призмой, так и с MEF, и, возможно, именно это я и сделаю. Однако сначала я работаю с образцом ServiceLocator, который Джон Папа создал .
В этом примере местоположение ViewModelLocator определено в app.xaml как статический ресурс:
<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:MVVMLib="clr-namespace:MVVMLib;assembly=MVVMLib"
x:Class="VMLocatorDemo.App">
<Application.Resources>
<MVVMLib:ViewModelLocator x:Key="VMLocator"/>
<MVVMLib:IndexerConverter x:Key="VMIndexerConverter" />
</Application.Resources>
</Application>
и поскольку view.xaml находится в том же проекте, он может ссылаться на локатор, и все в порядке:
<Grid x:Name="LayoutRoot" Background="White"
DataContext="{Binding Source={StaticResource VMLocator}, Converter={StaticResource VMIndexerConverter}, ConverterParameter=MainPageViewModel}">
<TextBlock Text="{Binding Path=CompanyName}"/>
</Grid>
Однако с отдельными библиотеками классов я не могу этого сделать, потому что view.xaml не знает, где находится локатор. Мне нужно, чтобы определение оставалось в xaml, чтобы я мог продолжать работать с различными моделями представления времени выполнения / разработки.
Полагаю, мой вопрос в том, как определить класс Locator в библиотеке классов или именно поэтому требуются другие инструменты, такие как MEF и / или призма?
Большое спасибо
Jason