在WPF中绑定Incode DataTemplate

时间:2012-09-26 23:05:31

标签: c# wpf mvvm

我有一个使用MVVM的WPF应用程序。

我知道在XAML中有这样做的方法,但我正在开发一个插件架构并提出了一个解决方案,其中插件将它的viewmodel暴露给我的插件主机的viewmodel并且它是datatemplate。我想将插件视图的生命周期管理留给WPF。我已经尝试让插件公开UserControl,但是当WPF决定处理我的UserControl时遇到问题所以我不会在没有奇怪的hacky工作的情况下重新连接它。我遇到了一些问题,我可以将控件绑定到数据,然后将模板绑定到我的数据模板。

我有一个类似于:

的ViewModel
public 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需要一个控件模板,而不是数据模板。

1 个答案:

答案 0 :(得分:1)

<UserControl>
   <ContentControl Content="{Binding SelectedViewModel}" ContentTemplate="{Binding SelectedTemplate}" />
</UserControl>