Установите ItemsSource в ContentPresenter.Content - PullRequest
0 голосов
/ 10 октября 2011

Я пробовал это:

<DataTemplate x:Key="RowItemTemplate">
    <ItemsControl ItemTemplate="{StaticResource ResourceKey=BorderItemTemplate}" ItemsSource="ContentPresenter.Content">
    </ItemsControl>
</DataTemplate>

, и это приводит к переполнению стека.Как установить ItemsSource для ItemsControl для содержимого ContentPresenter?

Редактировать:

Изменено ItemsSource="ContentPresenter.Content" на ItemsSource="{Binding}", но я все еще получаю переполнение стека.ItemsSource основного ItemsControl установлен на new List<List<string>> { new List<string> { "1", "2", "3", "4" }, new List<string> { "1", "2", "3" }, new List<string> { "1", "2" }, new List<string> { "1" } }; Вот большой фрагмент моего кода:

<UserControl.Resources>
    <DataTemplate x:Key="BorderItemTemplate">
        <Border RenderTransformOrigin="0.5,0.5">
            <Border.RenderTransform>
                <RotateTransform Angle="-135"/>
            </Border.RenderTransform>
            <ContentPresenter/>
        </Border>
    </DataTemplate>
    <DataTemplate x:Key="RowItemTemplate">
        <ItemsControl ItemTemplate="{StaticResource ResourceKey=BorderItemTemplate}" ItemsSource="{Binding}">
        </ItemsControl>
    </DataTemplate>
</UserControl.Resources>
<ItemsControl Name="comparisonGrid" ItemTemplate="{StaticResource ResourceKey=RowItemTemplate}">
</ItemsControl>

1 Ответ

1 голос
/ 10 октября 2011

Если вы просто пытаетесь установить для свойства ItemsSource данные, которые вы в данный момент используете для шаблонов, вы можете использовать следующее:

<DataTemplate x:Key="RowItemTemplate">
    <ItemsControl ItemsSource="{Binding}">
    </ItemsControl>
</DataTemplate>

Привязка интерпретируется как «значение this.DataContext», а DataContext всегда устанавливается на значение, которое вы шаблонизируете в пределах DataTemplate.

Редактировать

Глядя на полный код OPs, я думаю, что проблема заключается в использовании ContentPresenter в BorderItemTemplate. Предполагая, что целью является отображение числа, к которому оно привязано, его следует заменить следующим:

<DataTemplate x:Key="BorderItemTemplate">
    <Border RenderTransformOrigin="0.5,0.5">
        <Border.RenderTransform>
            <RotateTransform Angle="-135"/>
        </Border.RenderTransform>
        <TextBlock Text="{Binding}" />
    </Border>
</DataTemplate>
...