0
我正在尝试使用MVVM模式,具体来说,我正在试图确定如何使用包含视图(和视图模型)的单独类库进行工作。在网络上看起来,这与棱镜和MEF都以不同的方式完成,而这可能就是我最终要做的。但最初,我正在使用ServiceLocator示例John Papa created。Silverlight类库中的MVVM定位器类
在该样本中,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和/或棱镜是必需的?
非常感谢
杰森
感谢您的答复。我并不太熟悉行为(Silverlight新手),但我已经快速浏览过,并且可以看到它的工作原理。这是典型的行为可能如何使用,或者这只是一个创意的方式,你想出解决类似的问题?这样做有什么限制或问题需要我注意? – Jason 2011-01-24 15:06:52