如何将参数传递给ContentTemplateSelector?

时间:2015-08-19 22:52:30

标签: c# wpf contenttemplateselector

我希望TemplateSelector根据国家/地区选择模板。 因此,要MyDataTemplateSelector:SelectTemplate接收国家/地区,我Content ContentPresenter CountriesComboBox City。 问题是返回的模板未绑定到StreetsDataContext。我认为这是因为所选模板的Content未绑定到ViewModel,因此无法访问该模板的有界属性。

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

1 个答案:

答案 0 :(得分:0)

我在Victor的3岁post找到了答案。谢谢Victor。 我只需要在每个DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContentControl},Path=DataContext}"中添加DataTemplate