如何传递参数给ContentTemplateSelector

本文关键字:ContentTemplateSelector 参数 何传递 | 更新日期: 2023-09-27 18:08:44

我希望TemplateSelector选择基于国家的模板。因此,为了让MyDataTemplateSelector:SelectTemplate接收国家,我将ContentPresenterContent绑定到CountriesComboBox。问题是返回的模板没有绑定到CityStreets。我认为这是因为所选模板的DataContext没有绑定到ViewModel,因此,模板的有界属性是不可访问的。

我尝试了下面的代码,但在我看来,它不起作用,因为ContentPresenterContent绑定到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}" />

如何传递参数给ContentTemplateSelector

我在Victor 3年前的帖子中找到了一个答案。谢谢维克多。我只需要在每个DataTemplate中添加DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContentControl},Path=DataContext}"