模板中的MVVM绑定问题(特别是Expander控件的HeaderTemplate)

时间:2019-02-14 10:46:05

标签: c# mvvm binding datatemplate expander

好的,所以我有一个名为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)相同的文件中,以查看是否有所作为。没什么。

我希望有人能对此有所启发。

1 个答案:

答案 0 :(得分:1)

它在我的身边进行了以下更改:

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

说明:DataContext中的HeaderTemplate设置为Header本身(这似乎是合理的)。如果未设置Header,则DataContext为null