2011-03-22 5 views
1

2 차원 컬렉션 - 복잡한 데이터 유형 컬렉션을 바인딩하고 싶습니다. 컨트롤이 서식있는 텍스트 상자의 세로 목록 (열)을 좋아하는 것처럼 보입니다.2 차원 컬렉션을 일부 컨트롤에 바인딩합니다.

각 목록의 레코드 수는 같습니다.

한 가지 방법은 viewmodel의 뷰에 데이터를 전달한 다음 xaml의 코드 뒤에 이러한 목록을 프로그래밍 방식으로 만드는 것입니다. 하지만 그렇게하고 싶지는 않습니다. 뭔가 간단한 것이 있습니까?

<ItemsControl ItemsSource="{Binding MainCollection}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <ItemsControl ItemsSource="{Binding .}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <RichTextBox Text="{Binding .}"/> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

그래서 외부 ItemsControl 콜렉션 수집 결합 및 수직 StackPanel에서 렌더링 :

+0

데이터는 뷰가 직접 바인딩 할 수있는 ViewModel 내의 양식으로 조작되어야합니다. 그것은 ViewModel의 목적입니다. –

+0

예, 그게 내가하고 싶은 일이지만, 어떻게해야합니까? 내 열 수가 고정되지 않은 경우? – WhoIsNinja

답변

3

다만 데이터 바인딩 데이터 템플릿을 사용한다. 컬렉션의 각 컬렉션에는 내부가 ItemsControl입니다. 각 내면 ItemsControl은 컬렉션에있는 모든 항목을 에 RichTextBox으로 표시합니다.

분명히 적절한 경우 바인딩 경로를 수정하고 특정 시나리오에 맞게 필요에 따라 조정해야합니다.

0
<ListBox ItemsSource="{Binding Data}" Grid.Row="1" 
     Padding="20" Background="Transparent" BorderBrush="Black"> 
    <ListBox.ItemsPanel> 
     <ItemsPanelTemplate> 
      <WrapPanel IsItemsHost="True" /> 
     </ItemsPanelTemplate> 
    </ListBox.ItemsPanel> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
       <ListBox ItemsSource="{Binding}" BorderBrush="Black" BorderThickness="2"> 
        <ListBox.ItemTemplate> 
         <DataTemplate> 
         <Border BorderThickness="1" BorderBrush="Black" Padding="3" 
           HorizontalAlignment="Stretch" VerticalAlignment="Stretch"> 
          <Grid Width="300"> 
           <Grid.RowDefinitions> 
            <RowDefinition/> 
            <RowDefinition/> 
            <RowDefinition /> 
            <RowDefinition /> 
            <RowDefinition /> 
            <RowDefinition /> 
            <RowDefinition /> 
            <RowDefinition /> 
           </Grid.RowDefinitions> 
           <TextBlock Grid.Row="1" Text="{Binding Prop1}" /> 
           <TextBlock Grid.Row="2" Text="{Binding Prop2}" /> 
           <TextBlock Grid.Row="3" Text="{Binding Prop3}" /> 
           <TextBlock Grid.Row="4" Text="{Binding Prop4}" /> 
           <TextBlock Grid.Row="5" Text="{Binding Prop5, StringFormat=d}" /> 
           <TextBlock Grid.Row="6" Text="{Binding Prop6,StringFormat=c}" /> 
           <TextBlock Grid.Row="7" Text="{Binding Prop7,StringFormat=c}" /> 
          </Grid> 
         </Border> 
        </DataTemplate> 
        </ListBox.ItemTemplate> 
       </ListBox> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox>