我有一个使用MVVM的WPF应用程序。
我知道在XAML中有这样做的方法,但我正在开发一个插件架构并提出了一个解决方案,其中插件将它的viewmodel暴露给我的插件主机的viewmodel并且它是datatemplate。我想将插件视图的生命周期管理留给WPF。我已经尝试让插件公开UserControl,但是当WPF决定处理我的UserControl时遇到问题所以我不会在没有奇怪的hacky工作的情况下重新连接它。我遇到了一些问题,我可以将控件绑定到数据,然后将模板绑定到我的数据模板。
我有一个类似于:
的ViewModelpublic class MyViewModel
{
public DataTemplate SelectedTemplate{ get; set;}
public object SelectedViewModel {get; set;}
}
所选模板和视图模型在代码中的其他位置确定,但与我的问题无关。
我的问题是如何绑定到DataTemplate,以便我知道如何显示SelectedViewModel中显示的数据。
DataTemplate是一个DataTemplate创建的incode,代表:
<DataTemplate DataType="{x:Type vm:MyViewModel}">
<v:MyUserControl />
</DataTemplate>
我试过了:
<UserControl Template="{Binding Path=SelectedTemplate}"
Content="{Binding Path=SelectedViewModel"} />
但是UserControl需要一个控件模板,而不是数据模板。
答案 0 :(得分:1)
<UserControl>
<ContentControl Content="{Binding SelectedViewModel}" ContentTemplate="{Binding SelectedTemplate}" />
</UserControl>