繁体   English   中英

WPF内容视图未显示DataTemplate

[英]WPF Content View not displaying DataTemplate

我有一个ContentControl,它不会从其DataTemplate中显示任何XAML,而且我确信,对于WPF编码比我自己更好的人,我面临的问题将很明显。 出于机密原因,我在适当的地方用“ Object”代替了我的对象名称。

在我的MainWindow.xaml中,我有以下内容:

<ContentControl x:Name="ObjectDetailView"
                Margin="20,20,20,20" Grid.Row="2" Grid.Column="1"
                DataContext="{Binding SelectedItem, ElementName=ObjectListView}"
                Template="{DynamicResource DetailControlTemplate}" 
                ContentTemplate="{DynamicResource DetailDataTemplate}"/>

我将模板保存在单独的文件中,以保持代码可读性。 该模板位于DataResources.xaml文件中,该文件已成功用于ListView。 有关内容/模板的代码为:

<ControlTemplate x:Key="DetailControlTemplate">
    <Border Style="{StaticResource ObjectDetailBorderStyle}">
        <ContentPresenter/>
    </Border>
</ControlTemplate>

<DataTemplate x:Key="DetailDataTemplate" DataType="{x:Type model:Object}">
  <!-- Valid XAML -->
</DataTemplate>

在我的设计器中(同时在VS和Blend中)显示边框/背景渐变,但没有其他内容。 与正在运行的程序相同。

如果将<!-- Valid XAML -->移到控制模板中,它会显示正常,但是我不认为这是洁食,而且我也不相信数据绑定会那样工作。 如果我错了,请纠正我。

ObjectListView是从我的VM动态填充的ListView,并且我正在使用MVVM。 一切正常。 我希望此ContentControl仅在列表视图中有一个有效的选定对象时才出现,但这是UX糖,因此,我唯一关心的是使此内容控件显示我的模型数据。

我也是StackOverflow的新手,所以如果我错过了任何内容或在发布此问题时出错了,请告诉我。 在过去的几个小时里,我一直没有找到这个问题的机会,因为我不想浪费您的时间。

两件事情。 您没有设置ContentControl的实际Content ,而是仅设置了它的DataContext。 您应该这样写:

<ContentControl ...
    Content="{Binding SelectedItem, ElementName=ObjectListView}"
    Template="{DynamicResource DetailControlTemplate}" 
    ContentTemplate="{DynamicResource DetailDataTemplate}"/>

而且您的ControlTemplate缺少TargetType

<ControlTemplate x:Key="DetailControlTemplate" TargetType="ContentControl">
    <Border Style="{StaticResource ObjectDetailBorderStyle}">
        <ContentPresenter/>
    </Border>
</ControlTemplate>

如果没有TargetType,则默认情况下不会设置ContentPresenter的属性,您必须像

<ControlTemplate x:Key="DetailControlTemplate">
    <Border Style="{StaticResource ObjectDetailBorderStyle}">
        <ContentPresenter
            Content="{Binding Content,
                      RelativeSource={RelativeSource TemplatedParent}}"
            ContentTemplate="{Binding ContentTemplate,
                              RelativeSource={RelativeSource TemplatedParent}}"/>
    </Border>
</ControlTemplate>

暂无
暂无

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

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