Привязка двухмерной коллекции к некоторому элементу управления - PullRequest
1 голос
/ 22 марта 2011

Я хочу связать 2-мерную коллекцию - коллекцию коллекции сложного типа данных. Таким образом, элемент управления выглядит как (n) вертикальные списки (столбцы) текстовых полей.

В каждом списке будет одинаковое количество записей.

Один из способов - передать данные в представление из viewmodel, а затем программно создать эти списки в коде позади xaml. Но я не хочу этого делать, есть что-то попроще?

Ответы [ 2 ]

3 голосов
/ 22 марта 2011

Просто используйте привязку данных и шаблоны данных:

<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. Для каждой коллекции в этой коллекции есть внутренний ItemsControl. Каждый внутренний элемент ItemsControl отображает каждый элемент в своей коллекции как RichTextBox по горизонтали StackPanel.

Очевидно, что вам нужно будет исправить пути привязки соответствующим образом и настроить, как необходимо для вашего конкретного сценария.

0 голосов
/ 25 марта 2011
 <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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...