Я играл с Expressions Blend 4 последние несколько дней и начинаю понимать. Я только недавно начал играть с привязкой данных и считаю, что это действительно легко и эффективно. Для прототипирования лучшего приложения не найти.
В настоящее время я создаю прототип экрана Silverlight с потенциальной многоуровневой сеткой. Есть ли способ сделать это с помощью Blend? Я попытался создать многоуровневую выборку данных (я добавил данные коллекции в данные коллекции) и перетащил ее в сетку данных. Появился только первый уровень.
Любая помощь будет оценена.
Ответ 1 · Murven
Вы можете использовать ItemsControl с сеткой в качестве панели, а затем в ItemTemplate использовать другой ItemsControl и привязать его ко второму уровню данных с помощью другой сетки. Используя ItemsControl, вы можете гораздо больше контролировать способ отображения, чем просто сетку.
Если вам нужно что-то похожее на это:
Вот как это сделать:
Добавьте многоуровневый образец данных в свой проект Blend
Добавьте ItemsControl в корневой элемент макета
Привяжите свойство ItemsControl.ItemsSource к родительскому уровню
Создайте пустой шаблон элемента, используя этот параметр:
В шаблоне элемента создайте структуру, которую должен иметь второй уровень. В моем примере структура выглядит так:
Привяжите каждый из дочерних элементов к свойствам в элементах родительской коллекции, например к заголовку сетки.
Привяжите DataGrid внутри элемента к дочерней коллекции.
Конечным результатом будет список элементов, каждый из которых будет содержать StackPanel, Border с 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>
Надеюсь, это поможет.