Многоуровневая сетка в Expression Blend - PullRequest
0 голосов
/ 15 октября 2010

Последние несколько дней я играл в Expressions Blend 4, и я начинаю понимать его. Я только недавно начал играть с привязкой данных и считаю ее действительно простой и мощной. Для создания прототипов лучшего приложения не существует.

В настоящее время я создаю прототип экрана Silverlight с потенциальной многоуровневой сеткой. Есть ли способ сделать это с Blend? Я попытался создать многоуровневый образец данных (я добавил данные коллекции в данные коллекции) и перетащил их в таблицу данных. Только первый уровень появился.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 23 октября 2010

Вы можете использовать ItemsControl с сеткой в ​​качестве панели, а затем, в ItemTemplate, использовать другой ItemsControl и связать его со вторым уровнем данных с помощью другой сетки. Используя ItemsControl, вы можете контролировать то, как все отображается, гораздо больше, чем просто сетка.

Если вам нужно что-то похожее на это: Multi-level Binding

Вот как вы можете сделать это:

  1. Добавление многоуровневого примера источника данных в проект Blend
  2. Добавить ItemsControl в корневой элемент макета
  3. Свяжите свойство ItemsControl.ItemsSource с родительским уровнем
  4. Создайте пустой шаблон элемента, используя эту опцию: Item Template/Create Empty
  5. В шаблоне элемента создайте структуру, которую вы хотите иметь на втором уровне. В моем примере структура выглядит следующим образом:

    DataTemplate Structure

  6. Свяжите каждый из дочерних элементов со свойствами в элементах родительской коллекции, такими как заголовок сетки.
  7. Свяжите DataGrid внутри элемента с дочерней коллекцией.

Конечным результатом будет список элементов, и каждый элемент будет содержать StackPanel, границу с TextBlock внутри и DataGrid, привязанный к дочерним данным.

XAML для этого примера выглядит следующим образом:

    <UserControl
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:SampleData="clr-namespace:Expression.Blend.SampleData.SampleDataSource" xmlns:System="clr-namespace:System;assembly=mscorlib" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" mc:Ignorable="d"
        x:Class="ASD_Answer005.MainPage" d:DesignWidth="703" d:DesignHeight="435">

        <UserControl.Resources>
            <SampleData:SampleDataSource x:Key="SampleDataSource" d:IsDataSource="True"/>
            <DataTemplate x:Key="ChildDataTemplate">
                <StackPanel Orientation="Vertical">
                    <Border BorderThickness="0,0,0,2" BorderBrush="Black" Padding="5">
                        <TextBlock TextWrapping="Wrap" Text="{Binding CategoryName}" FontSize="26.667" Height="39"/>
                    </Border>
                    <sdk:DataGrid ItemsSource="{Binding ChildCollection}" BorderThickness="0"/>
                </StackPanel>
            </DataTemplate>
        </UserControl.Resources>
        <d:DataContext>
            <Binding Source="{StaticResource SampleDataSource}"/>
        </d:DataContext>
        <UserControl.DataContext>
            <Binding Source="{StaticResource SampleDataSource}"/>
        </UserControl.DataContext>

        <Grid x:Name="LayoutRoot" Background="White">
            <ScrollViewer HorizontalAlignment="Left" VerticalAlignment="Top" BorderThickness="0" Padding="0">
                <StackPanel Orientation="Vertical" Width="703">
                    <ItemsControl ItemsSource="{Binding ParentCollection}" ItemTemplate="{StaticResource ChildDataTemplate}"/>
                </StackPanel>
            </ScrollViewer>
        </Grid>
    </UserControl>

Надеюсь, это поможет.

...