2011-01-30 2 views
0

Im пытается создать набор сеток и добавить их в scrollview.Многомерные привязки данных? Как?

Вот что он должен выглядеть следующим образом: http://tinypic.com/r/256gpxf/7

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

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

EDIT:

Класс для busstops:

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 для остановки с четырьмя депатурами:

<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> 

Использует сетку даже хорошую идею? Кажется, что я должен определить каждую строку с rowdefinitions и т. Д.

Заранее благодарим!

/R

+0

не уверен, что понял ... но позвольте мне попробовать: у вас есть двухуровневая иерархия объектов? Если true, «просто» использует привязку ItemsControl к уровню первого уровня и добавляет шаблон данных с другим элементом управления элементами, связанным с 2-м уровнем объектов ... Можете ли вы вставить свой код OM, чтобы помочь мне разобраться? –

+0

обновлено сейчас steve b :) – Richard

ответ

3

Edit: Теперь, когда вы писали код я настроил шаблон. Вы, между прочим, ошиблись «Отходы», у него отсутствует «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

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

+0

+1 Потому что это действительно хорошее руководство для решения. Однако вопрос отмечен как Silverlight и Windows-Phone-7, в Silverlight нет 'IsSharedSizeScope'. Видя, что в качестве своего WP7-приложения более подробное определение размеров является приемлемым, поскольку существует только несколько форм-факторов устройств WP7. – AnthonyWJones

+0

О, я не знал этого ...(я еще ничего не делал в Silverlight, поэтому я не знаю всех различий) –

+0

Работал безупречно! Спасибо миллион за ответ (и за орфографический отзыв) :) – Richard