Как передать параметр в 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
,