Как передать параметр в ContentTemplateSelector?

Я хочу TemplateSelector выбрать шаблон в зависимости от страны. Таким образом, для MyDataTemplateSelector:SelectTemplate чтобы получить страну, которую я связываю Content из ContentPresenter в CountriesComboBox, Проблема в том, что возвращаемый шаблон не привязан к City или же Streets, Я думаю, что это происходит потому, что DataContext выбранного шаблона не привязан к ViewModel, поэтому ограниченные свойства тамплета недоступны.

Я попробовал код ниже, но, по моему мнению, он не работает, так как Content из ContentPresenter связан с CountriesComboBox и не {Binding} так, как это должно быть. Но если я связываю Content в {Binding}У меня не будет доступа к выбранному элементу CountriesComboBox от TemplatrSelector.

Итак, как мне это сделать?

<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}" />

1 ответ

Я нашел ответ в 3-летнем посте от Виктора. Спасибо, Виктор. Мне просто нужно добавить DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContentControl},Path=DataContext}" в каждом DataTemplate,

Другие вопросы по тегам