模板问题中的 MVVM 绑定(特别是 Expander 控件的 HeaderTemplate)
MVVM binding in templates issue (specifically Expander control's HeaderTemplate)
好的,我有一个名为 GeneralVocabItemTemplateInput 的数据模板。其中有一个扩展器控件。
数据模板链接到视图模型,因此可以绑定各种项目。事实上,我可以按如下方式为扩展器绑定 header 文本:
<DataTemplate x:Key="GeneralVocabItemTemplateInput">
<Grid Margin="2">
<Expander Header="{Binding ID}">
这很好用。 header 文本显示 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) 相同的文件中,以查看是否有所不同。没有区别。
我希望有人能对此有所启发。
它在我这边进行了以下更改:
<Expander HeaderTemplate="{StaticResource TemplateTest}" Header="{Binding}">
解释:HeaderTemplate
中的DataContext
设置为Header
本身(这似乎是合理的)。当没有设置 Header
时,DataContext 因此是 null
.
好的,我有一个名为 GeneralVocabItemTemplateInput 的数据模板。其中有一个扩展器控件。
数据模板链接到视图模型,因此可以绑定各种项目。事实上,我可以按如下方式为扩展器绑定 header 文本:
<DataTemplate x:Key="GeneralVocabItemTemplateInput">
<Grid Margin="2">
<Expander Header="{Binding ID}">
这很好用。 header 文本显示 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) 相同的文件中,以查看是否有所不同。没有区别。
我希望有人能对此有所启发。
它在我这边进行了以下更改:
<Expander HeaderTemplate="{StaticResource TemplateTest}" Header="{Binding}">
解释:HeaderTemplate
中的DataContext
设置为Header
本身(这似乎是合理的)。当没有设置 Header
时,DataContext 因此是 null
.