Мне нужно отобразить 2 типа данных, когда элемент пары значений ключа в списке будет расширен. Ключ элемента ключа значения ключа должен быть заголовком расширителя. Первая таблица должна быть привязана к первой сетке данных и второй ко второй сетке. Проблема в том, что второй «элемент» в ItemsControl отображает то же значение, что и первое. (Я думаю, что ItemsSource в DataGrid в связывании неверен, так как VM генерирует данные для ListOfKeyValuePairs правильно.)Связывание списка <KeyValuePair <строка, список <DataTable> >> элементы управления wpf
<!-- Data grid template -->
<DataTemplate x:Key="ValuesTemplate">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<TextBlock Text="data grid header text" Margin="20,0,0,0" Grid.Row="2" />
<DataGrid Grid.Row="0" ItemsSource="{Binding [0]}" />
<DataGrid Grid.Row="1" ItemsSource="{Binding [1]}" />
</Grid>
</DataTemplate>
<!-- List of data tables -->
<ItemsControl ItemsSource="{Binding ListOfKeyValuePairs}" VirtualizingStackPanel.IsVirtualizing="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Expander IsExpanded="True" Margin="0,0,0,10">
<Expander.Header>
<TextBlock Text="{Binding Key}" Margin="0,0,20,0" VerticalAlignment="Top" />
</Expander.Header>
<ContentControl Content="{Binding Value}" ContentTemplate="{StaticResource ValuesTemplate}" ScrollViewer.CanContentScroll="True" Margin="20,0,0,0" />
</Expander>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Поместите 'PresentationTraceSources.TraceLevel = High' в любое обязательство, о котором вы подозреваете. Например: '{Binding Foo, PresentationTraceSources.TraceLevel = High}'. Запустите программу в отладчике и посмотрите, какой результат вы видите на панели «Вывод» в VS. Он скажет вам, что он делает, чтобы найти цель привязки - и если это не удастся, оно скажет вам, что (если что-нибудь) оно нашло вместо этого. –