繁体   English   中英

使用Prism时,如何允许WPF为Window控件解析ContentTemplate?

[英]How to allow WPF to resolve ContentTemplate for a Window control when using Prism?

我正在尝试创建一个基于WPF Window类的简单对话框类型的控件(Popup在这里不会解决问题)。 在我的应用程序中,我在Application.Resources中注册了一个DataTemplate:

<Application.Resources>
    <DataTemplate  DataType="{x:Type local:EntitySelectorViewModel}">
        <local:EntitySelector></local:EntitySelector>
    </DataTemplate>        
</Application.Resources>

在我的Window控件中,我设置了Window.Content,并且我希望WPF可以根据上面显示的DataTemplate注册将ContentTemplate设置为EntitySelector的实例:

[Export(typeof(EntitySelectorDialog))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class EntitySelectorDialog : Window
{
    [ImportingConstructor]
    public EntitySelectorDialog(EntitySelectorViewModel vm)
    {
        InitializeComponent();

           // DataContext = vm;  // does not work

           // EDIT: Per two answers shown below the following should work but it does not.
           Content = vm;  
    }
}

问题是WPF无法解析ContentTemplate,即未创建EntitySelector的实例。 此外,当我查看EntitySelectorDialog的XAML时,我看到外壳程序的一个实例已注入到Window控件(EntitySelectorDialog)中。

我对Prism的了解不足,无法知道我是否想顺其自然,以某种方式使用外壳,还是想完全阻止Prism注入它。 我认为在此特定控件中不需要它,因此,如果仅阻止Prism注入就有意义,那么我会选择该路线。

为了记录,我尝试从Window控件中删除Prism属性,然后手动更新组件。 这似乎没有任何效果-Prism仍然设法以某种方式注入了外壳,而我的ContentTemplate没有得到解决。

除了Window声明本身,没有XAML可显示给Window控件(EntitySelectorDialog)-我希望内容完全来自ContentTemplate(EntitySelector)。

我已经看过了这可能会提供答案的方法,但是我不知道如何在不破坏应用程序其余部分的情况下实现它:

使Unity解析XAML中的视图

您需要将vm设置为EntitySelectorDialog.Content以根据类型触发WPF解决DataTemplate 所以你要么添加

Content = vm;

在构造函数中或添加

Content = {Bing}

在Xaml中。

将窗口的Content设置为ContentControl ,并将该ContentControlContent属性设置或绑定到视图模型:

[Export(typeof(EntitySelectorDialog))]
[PartCreationPolicy(CreationPolicy.NonShared)]
public partial class EntitySelectorDialog : Window
{
    [ImportingConstructor]
    public EntitySelectorDialog(EntitySelectorViewModel vm)
    {
        InitializeComponent();
        DataContext = vm;
        Content = new ContentControl() { Content = vm };
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM