MVVM を使用している WPF アプリケーションがあります。
XAML でこれを行う方法があることは知っていますが、プラグイン アーキテクチャに取り組んでおり、プラグインがそのビューモデルをプラグイン ホストのビューモデルとデータ テンプレートに公開するソリューションを考え出しました。プラグインビューのライフタイム管理はWPFに任せたい。プラグインで UserControl を公開しようとしましたが、WPF が UserControl を破棄することを決定したときに問題が発生したため、奇妙なハックな回避策なしに再接続しませんでした。コントロールをデータにバインドでき、それがテンプレートであり、データ テンプレートにバインドできるようにするために、ある種のバインディングを取得する際に問題が発生しています。
次のようなViewModelがあります。
public class MyViewModel
{
public DataTemplate SelectedTemplate{ get; set;}
public object SelectedViewModel {get; set;}
}
選択したテンプレートとビューモデルは、コード内の別の場所で決定されますが、私の質問には関係ありません。
私の質問は、SelectedViewModel に表示されるデータを表示する方法を知るために、DataTemplate にバインドする方法です。
DataTemplate は、以下を表すコードで作成された DataTemplate です。
<DataTemplate DataType="{x:Type vm:MyViewModel}">
<v:MyUserControl />
</DataTemplate>
私が試してみました:
<UserControl Template="{Binding Path=SelectedTemplate}"
Content="{Binding Path=SelectedViewModel"} />
ただし、UserControl は、データ テンプレートではなく、コントロール テンプレートを想定しています。