アプリケーションでビルドするために、MVVM アーキテクチャと MEF を使用しようとしています。アプリケーションをできるだけ一般的な方法でユーザーに表示できるようにするためにDataTemplates
andを使用したいと考えています。ContentControls
そのため、ユーザーが情報を読み書きし、XML やデータベースなどのどこかに結果を読み書きできる機能を作成しています。だから私は2つのインターフェースを持ってい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>
ただし、現在実装している方法は、1 つのクラスがこれらの両方を継承しており、これが問題を引き起こしていることです。
[Export(typeof(ITestStorage))]
[Export(typeof(IResultStorage))]
public sealed class XmlStorage : ITestStorage, IResultStorage { ... }
したがって、AdminViewModel
上記の両方ContentControls
が描画されると、タイプのように見えるので、適切に描画するXmlStorage
ための作成方法がわかりません。DataTemplates
うまくいけば、これは理にかなっていますが、私が完全に間違った方法で行った場合は、知っておくとよいでしょう.