首页 > 解决方案 > 模板中的 MVVM 绑定问题(特别是 Expander 控件的 HeaderTemplate)

问题描述

好的,所以我有一个名为 GeneralVocabItemTemplateInput 的数据模板。其中有一个扩展器控件。

数据模板链接到视图模型,因此可以绑定各种项目。事实上,我可以为扩展器绑定标题文本,如下所示:

<DataTemplate x:Key="GeneralVocabItemTemplateInput">
            <Grid Margin="2">
                <Expander Header="{Binding ID}">

这很好用。标题文本显示 ID 值。关键是扩展器的数据上下文是我想要的视图模型。

到目前为止一切都很好。现在,我想要一个模板而不是将 ID 作为文本,这样我就可以进行更多的自定义。我创建了一个可以分配给扩展器的 HeaderTemplate 属性的数据模板。所以我在我的资源字典中创建了一个,如下所示:

<DataTemplate x:Key="TemplateTest">
    <StackPanel>
        <Border BorderThickness="1" BorderBrush="Black">
            <TextBlock Margin="2" Text="{Binding ID}"/>
        </Border>
    </StackPanel>
</DataTemplate>

很简单,一个设置的边界以及与之前相同的边界值。

我在扩展器中使用它,如下所示:

<DataTemplate x:Key="GeneralVocabItemTemplateInput">
            <Grid Margin="2">
                <Expander HeaderTemplate="{StaticResource TemplateTest}">

这就是我遇到问题的地方。黑色边框出现,但里面没有任何东西。

显然,模板有效,并且可以在出现边框后找到,但绑定没有。我已经玩了一段时间了,还没有想出解决方案。

我尝试过的一件事是更改 TemplateTest 的存储位置(数据模板)。它在一个单独的资源字典文件中,所以我将它移到与我的原始模板 (GeneralVocabItemTemplateInput) 相同的文件中,看看这是否有所不同。没有不同。

我希望有人可以对此有所了解。

标签: c#mvvmbindingdatatemplateexpander

解决方案


它适用于我的以下更改:

<Expander HeaderTemplate="{StaticResource TemplateTest}" Header="{Binding}">

解释:DataContextinHeaderTemplate设置为Header本身(这似乎是合理的)。因此,当没有Header集合时,DataContext 为null


推荐阅读