2017-12-13 15 views
1

사전에 새 datagrid foreach 키를 사용하여보기를 동적으로 만들고 싶습니다. XAML에서이 작업을 수행 할 수 있습니까?XAML의 루프 사전 키? (WPF)

내 사전은 다음과 같습니다
사전 < 문자열 목록 < 객체>> 의 핵심은 데이터 그리드에 표시 될 것입니다 사전의 제목과 개체의 목록입니다. 사전에 하나의 DataGrid foreach 키를 생성하고 싶습니다.

exemple 들어

나는 그 내 사전의 항목이있는 경우 : 내 프로그램에 표시 할

<"Toto", [{"prop1":"tata", "prop2":"titi"}, {"prop1":"tata2", "prop2":"titi2"}]> 
<"Tutu", [{"prop1":"tatax", "prop2":"titix"}]> 

을이 : ASP.NET에서

TOTO       TUTU 
-------------    -------------- 
Prop1 | Prop2    Prop1 | Prop2 
------|------    -------|------ 
tata | titi     tatax | titix 
tata2 | titi2 

당신은 그것을 할 수 @ foreach를보기의 한가운데에 놓을 수는 있지만 XAML/WPF에서 어떻게 생성 할 수 있습니까?

+2

적절한 ItemsPanel 및 ItemTemplate과 함께 ItemsControl을 사용하고 사전에 ItemsSource를 바인딩하십시오. – ASh

+0

몇 가지 예가 있습니까? 내 직접 개체 목록에있는 DataGrid 바인딩하는 방법을 알고 있지만 내 사전을 처리하는 방법을 모릅니다. 그리고 어떤 예제도 찾지 못했습니다. – Karakayn

+0

Dictionary는 KeyValuePair의 IEnumerable을 구현합니다. ItemsControl에 대한 일반적인 접근법이 여기에 적용됩니다. 여기 ItemsControl에 – ASh

답변

1

@ASh 및 @ CelsoLívero의 도움으로 수행 한 코드 작업 코드는 다음과 같습니다. 동일한 문제가있는 경우 다른 사람들을 돕기 위해 게시합니다.

내가 내 사전의 값에 List<Tag>을 가지고, 그게 내가 OneWay을 둘 필요 (이 읽기 전용 데이터 그리드이기 때문에, 그것은 내 요구에 입력)하지만 사람이 있다면 것은 바인딩 TwoWay, 당신이 필요 갖고 싶어 이유 List 대신 ObservableCollection을 작성하십시오.

<ItemsControl x:Name="itemControlTags" 
     ItemsSource="{Binding CurrentModuleItem.DicoTags}" 
     ScrollViewer.CanContentScroll="True" 
     ScrollViewer.VerticalScrollBarVisibility="Auto" 
     ScrollViewer.HorizontalScrollBarVisibility="Auto" 
     > 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel Orientation="Horizontal" 
       Background="White" 
       Width="{Binding ActualWidth, ElementName=itemControlTags}" 
       Height="{Binding ActualHeight, ElementName=itemControlTags}" /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <StackPanel> 
       <TextBlock Text="{Binding Key}"></TextBlock> 
       <DataGrid AutoGenerateColumns="True" 
        CanUserAddRows="False" 
        IsReadOnly="True" 
        CanUserDeleteRows="False" 
        Name="TagsDatagrid" 
        ItemsSource="{Binding Path=Value, Mode=OneWay}"> 
       </DataGrid> 
      </StackPanel> 

     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

자, 이제 나는 것 –

+0

축하, 올바른 것으로 대답을 표시하지만, 그래서, 내가이 일 이상을 기다릴 것 "당신은 2 일 내에 자신의 대답을 받아 들일 수있다"라고 – Karakayn