2016-11-03 3 views
1

Мне нужно отобразить 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> 
+0

Поместите 'PresentationTraceSources.TraceLevel = High' в любое обязательство, о котором вы подозреваете. Например: '{Binding Foo, PresentationTraceSources.TraceLevel = High}'. Запустите программу в отладчике и посмотрите, какой результат вы видите на панели «Вывод» в VS. Он скажет вам, что он делает, чтобы найти цель привязки - и если это не удастся, оно скажет вам, что (если что-нибудь) оно нашло вместо этого. –

ответ

1

Ваш код работает отлично. Но вы используете Grid внутри своего ValuesTemplate. Оба предмета

<DataGrid ItemsSource="{Binding [0]}" /> 
<DataGrid ItemsSource="{Binding [1]}" /> 

находятся в таком же положении. Один DataGrid покрывает другой DataGrid. Используйте определенные строки, такие как

<DataGrid Grid.Row="0" ItemsSource="{Binding [0]}" /> 
<DataGrid Grid.Row="1" ItemsSource="{Binding [1]}" /> 

или используйте простой StackPanel.

Смежные вопросы