0

TemplateSelector国に基づいてテンプレートを選択する必要があります。だから、私がバインドする国MyDataTemplateSelector:SelectTemplateを受け取るために。問題は、返されたテンプレートがまたはにバインドされていないことです。選択したテンプレートがViewModelにバインドされていないため、タンプレートのバインドされたプロパティにアクセスできないために発生すると思います。ContentContentPresenterCountriesComboBoxCityStreetsDataContext

以下のコードを試してみましたが、私の意見では、ContentofContentPresenterがバインドされているのにバインドされCountriesComboBoxていないため{Binding}、機能しません。しかし、にバインドするContentと、 TemplatrSelector{Binding}の選択されたアイテムにアクセスできなくなります。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}" />
4

1 に答える 1

0

I've found an answer in 3 years old post from Victor. Thanks Victor. I just need to add DataContext="{Binding RelativeSource={RelativeSource AncestorType=ContentControl},Path=DataContext}" in each DataTemplate.

于 2015-08-20T20:05:12.437 に答える