Многомерная привязка данных? Как? - PullRequest
0 голосов
/ 30 января 2011

Я пытаюсь создать набор сеток и добавить их в представление прокрутки.

Вот как это должно выглядеть: http://tinypic.com/r/256gpxf/7

"depatures" отображаются под "otherСтоп "должен быть динамичным.Я знаю, как создавать заголовки («другая остановка»), используя привязку данных, но мне нужно получать значения для каждой остановки.Это похоже на привязку данных в какой-то привязке.

Трудно объяснить, но если вы посмотрите на скриншот, я думаю, что вы, ребята, можете понять, что я имею в виду:)

РЕДАКТИРОВАТЬ:

Класс для рабочих столов:

public class BusStop
    {
        public string Name { get; private set; }
        public string ID { get; private set; }
        public List<Depature> Depatures { get; private set; }

        public BusStop(string name, string id)
        {
            Name = name;
            ID = id;
            Depatures = new List<Depature>();
        }
    }

Класс депатуры:

public class Depature
    {

        public string Destination { get; private set; }
        public int Next { get; private set; }
        public int NextNext { get; private set; }

        public Depature(string destination, int next, int nextNext)
        {
            Destination = destination;
            Next = next;
            NextNext = nextNext;
        }
    }

К каждой остановке прикреплен различный набор депатур.Это то, что я пытаюсь заселить в сетку.Одна сетка для каждой остановки.Вот «статический» пример xaml для остановки с 4 значениями:

<Grid Margin="0,0,0,12">
    <Grid.RowDefinitions>
        <RowDefinition Height="42" />
        <RowDefinition Height="28" />
        <RowDefinition Height="28" />
        <RowDefinition Height="28" />
        <RowDefinition Height="28" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="38" />
        <ColumnDefinition Width="280" />
        <ColumnDefinition Width="46" />
        <ColumnDefinition Width="46" />
    </Grid.ColumnDefinitions>
    <TextBlock Grid.Row="0" Grid.ColumnSpan="2" Grid.Column="0" FontSize="32" Text="Other Stop" Foreground="#FFE37306" />
    <TextBlock VerticalAlignment="Bottom" Grid.Row="0" Grid.Column="2" FontSize="12" Text="avgår"/>
    <TextBlock VerticalAlignment="Bottom" Grid.Row="0" Grid.Column="3" FontSize="12" Text="nästa"/>
    <Grid Grid.Row="1" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
        <TextBlock Style="{StaticResource VasttrafikTextLine}" Text="80" />
    </Grid>
    <TextBlock Margin="6,0,12,0" Grid.Row="1" Grid.Column="1" Text="Nils Eriksson Term" />
    <TextBlock HorizontalAlignment="Left" Grid.Row="1" Grid.Column="2" Width="20" Text="5" />
    <TextBlock HorizontalAlignment="Left" Grid.Row="1" Grid.Column="3" Width="20" Text="15" />
    <Grid Grid.Row="2" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
        <TextBlock Style="{StaticResource VasttrafikTextLine}" Text="80" />
    </Grid>
    <TextBlock Margin="6,0,12,0" Grid.Row="2" Grid.Column="1" Text="Nils Eriksson Term" />
    <TextBlock HorizontalAlignment="Left" Grid.Row="2" Grid.Column="2" Width="20" Text="5" />
    <TextBlock HorizontalAlignment="Left" Grid.Row="2" Grid.Column="3" Width="20" Text="15" />
    <Grid Grid.Row="3" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
        <TextBlock Style="{StaticResource VasttrafikTextLine}" Text="80" />
    </Grid>
    <TextBlock Margin="6,0,12,0" Grid.Row="3" Grid.Column="1" Text="Nils Eriksson Term" />
    <TextBlock HorizontalAlignment="Left" Grid.Row="3" Grid.Column="2" Width="20" Text="5" />
    <TextBlock HorizontalAlignment="Left" Grid.Row="3" Grid.Column="3" Width="20" Text="15" />
    <Grid Grid.Row="4" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
        <TextBlock Style="{StaticResource VasttrafikTextLine}" Text="80" />
    </Grid>
    <TextBlock Margin="6,0,12,0" Grid.Row="4" Grid.Column="1" Text="Nils Eriksson Term" />
    <TextBlock HorizontalAlignment="Left" Grid.Row="4" Grid.Column="2" Width="20" Text="5" />
    <TextBlock HorizontalAlignment="Left" Grid.Row="4" Grid.Column="3" Width="20" Text="15" />
</Grid>

Является ли использование сетки даже хорошей идеей?Кажется, мне нужно определить каждую строку с помощью определений строк и т. Д.

Заранее спасибо!

/ R

1 Ответ

3 голосов
/ 30 января 2011

Редактировать: Теперь, когда вы разместили свой код, я настроил шаблон.Кстати, вы ошиблись в «Вылетах», в нем отсутствует «r».

Образцы данных, которые я использую:

        List<BusStop> data = new List<BusStop>();
        BusStop busStop1 = new BusStop("Some Stop", "123");
        busStop1.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
        busStop1.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
        busStop1.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
        busStop1.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
        BusStop busStop2 = new BusStop("Other Stop", "42");
        busStop2.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
        busStop2.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
        busStop2.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
        busStop2.Depatures.Add(new Depature("Nils Eriksson Term", 5, 15));
        BusStop busStop3 = new BusStop("Not A Stop", "0");
        busStop3.Depatures.Add(new Depature("Void", 5, 15));
        busStop3.Depatures.Add(new Depature("Void", 5, 15));
        busStop3.Depatures.Add(new Depature("Void", 5, 15));
        busStop3.Depatures.Add(new Depature("Void", 5, 15));
        data.Add(busStop1);
        data.Add(busStop2);
        data.Add(busStop3);
        Data = data;

Общий подход должен заключаться в определении вложенных DataTemplates, здесь яиспользуйте ItemsControl, чей ItemTemplate содержит заголовки, а другой ItemsControl:

    <ItemsControl ItemsSource="{Binding Data}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="38" />
                            <ColumnDefinition Width="280" />
                            <ColumnDefinition Width="46" />
                            <ColumnDefinition Width="46" />
                        </Grid.ColumnDefinitions>
                        <Grid.Children>
                            <TextBlock Grid.Column="0" Grid.ColumnSpan="2" Text="{Binding Name}" FontSize="32" Foreground="#FFE37306"/>
                            <TextBlock Grid.Column="2" VerticalAlignment="Bottom" FontSize="12" Text="avgår"/>
                            <TextBlock Grid.Column="3" VerticalAlignment="Bottom" FontSize="12" Text="nästa"/>
                        </Grid.Children>
                    </Grid>
                    <ItemsControl ItemsSource="{Binding Depatures}">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="38" />
                                        <ColumnDefinition Width="280" />
                                        <ColumnDefinition Width="46" />
                                        <ColumnDefinition Width="46" />
                                    </Grid.ColumnDefinitions>
                                    <Grid.Children>
                                        <Grid Grid.Column="0" Style="{StaticResource VasttrafikGridLine}" Background="#0D4774">
                                            <TextBlock Grid.Column="0" Text="80" Style="{StaticResource VasttrafikTextLine}"/>
                                        </Grid>
                                        <TextBlock Grid.Column="1" Text="{Binding Destination}" Foreground="DarkBlue"/>
                                        <TextBlock Grid.Column="2" Text="{Binding Next}"     HorizontalAlignment="Left" Width="20" Foreground="DarkBlue"/>
                                        <TextBlock Grid.Column="3" Text="{Binding NextNext}" HorizontalAlignment="Left" Width="20" Foreground="DarkBlue"/>
                                    </Grid.Children>
                                </Grid>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>
                    </ItemsControl>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

выглядит примерно так (в нем, конечно, отсутствуют ваши конкретные стили и переопределения): A Picture http://i54.tinypic.com/v8cwmd.png

Вы по-прежнему не указали, откуда берутся ваши три разных блока и т. Д., Но все, что за этим, безусловно, является вашей проблемой ...

...