0

我希望TemplateSelector根据国家/地区选择模板。所以,为了MyDataTemplateSelector:SelectTemplate接收我绑定ContentContentPresenter的国家CountriesComboBox。问题是返回的模板未绑定到Cityor Streets。我认为这是因为DataContext所选模板未绑定到 ViewModel,因此无法访问模板的有界属性。

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

1 回答 1

0

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

于 2015-08-20T20:05:12.437 回答