我正在尝试使用 MVVM 架构和 MEF 来构建应用程序。我想使用DataTemplates
andContentControls
以允许我的应用程序以尽可能通用的方式向用户显示。
所以我现在正在为用户创建读取/写入信息和读取/写入结果到某个地方的能力,可以是 XML,也可以是数据库。所以我有两个接口IResultStorage
和ITestStorage
我现在想为用户创建一个页面来更新这些设置,因此文件位置或数据库等。我的视图模型通过 MEF 导入它们:
public sealed class AdminViewModel : ViewModelBase
{
[Import]
public ITestStorage TestStorage { get; set; }
[Import]
public IResultStorage ResultStorage { get; set; }
}
然后将视图导出并加载到Resources.MergedDictionaries
运行时
<DataTemplate DataType="{x:Type vm:AdminViewModel}">
<Grid>
<TabControl Grid.Row="0">
<TabItem Header="Tests">
<ContentControl Grid.Row="0" Content="{Binding TestStorage}"/>
</TabItem>
<TabItem Header="Results">
<ContentControl Grid.Row="0" Content="{Binding ResultStorage}"/>
</TabItem>
</TabControl>
</Grid>
</DataTemplate>
但是,我目前实现它的方式是一个类继承了这两个,正是这导致了我的问题:
[Export(typeof(ITestStorage))]
[Export(typeof(IResultStorage))]
public sealed class XmlStorage : ITestStorage, IResultStorage { ... }
因此,当AdminViewModel
上面的内容被绘制时,两者似乎ContentControls
都是类型XmlStorage
,所以我不知道如何创建DataTemplates
以正确绘制它们。
希望这是有道理的,如果我以完全错误的方式完成它,那将是一件好事。