如何传递参数给ContentTemplateSelector
本文关键字:ContentTemplateSelector 参数 何传递 | 更新日期: 2023-09-27 18:08:44
我希望TemplateSelector
选择基于国家的模板。因此,为了让MyDataTemplateSelector:SelectTemplate
接收国家,我将ContentPresenter
的Content
绑定到CountriesComboBox
。问题是返回的模板没有绑定到City
或Streets
。我认为这是因为所选模板的DataContext
没有绑定到ViewModel,因此,模板的有界属性是不可访问的。
我尝试了下面的代码,但在我看来,它不起作用,因为ContentPresenter
的Content
绑定到CountriesComboBox
而不是{Binding}
,因为它应该是。但是,如果我将Content
绑定到{Binding}
,我将无法从TemplatrSelector访问CountriesComboBox
的选定项。
我该怎么做呢?
<DataGrid>
<DataGrid.Resources>
<DataTemplate x:Key="Readonly_CellEditingTemplate">
<TextBlock Text="{Binding City}"/>
</DataTemplate>
<DataTemplate x:Key="Editable_CellEditingTemplate">
<ComboBox ItemsSource="{Binding Streets}" />
</DataTemplate>
<local:MyDataTemplateSelector ReadonlyTemplate="{StaticResource Readonly_CellEditingTemplate}" EditableTemplate="{StaticResource Editable_CellEditingTemplate}" x:Key="MyDataTemplateSelector"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Header="City">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding City}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ContentPresenter x:Name="Presenter" Content="{Binding ElementName=CountriesComboBox, Path=SelectedIndex}" ContentTemplateSelector="{StaticResource MyDataTemplateSelector}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
<ComboBox Name="CountriesComboBox" ItemsSource="{Binding Countries}" />
我在Victor 3年前的帖子中找到了一个答案。谢谢维克多。我只需要在每个DataTemplate
中添加DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContentControl},Path=DataContext}"
。