【问题标题】:MVVM binding in templates issue (specifically Expander control's HeaderTemplate)模板中的 MVVM 绑定问题(特别是 Expander 控件的 HeaderTemplate)
【发布时间】:2019-07-08 08:54:03
【问题描述】:

好的,所以我有一个名为 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# mvvm binding datatemplate expander


    【解决方案1】:

    它在我身边有以下变化:

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

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

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 2011-04-07
      • 2010-12-15
      • 1970-01-01
      • 2011-06-06
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多