2011-01-30 17 views
0

私は一連のグリッドを作成してスクロールビューに追加しようとしています。 「他の停止」の下に現れて「depaturesは」ダイナミックでなければなりません http://tinypic.com/r/256gpxf/7多次元データバインディング?の仕方?

:ここ

は、それがどのように見えるかです。私は、データバインディングを使用してタイトル( "その他の停止")を作成する方法を知っていますが、私はそれぞれの停止のためのdepaturesを取得する必要があります。これは、ある種のデータバインディングにおけるデータバインディングのようなものです。

それは説明していますが、スクリーンショットを見れば、私はあなたたちは私が

EDIT :)何を意味するかを把握することができると思うのは難しい:バス停ため

クラス:

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

それぞれのストップには、異なるセットのデフェクターが付いています。それが私がグリッドに入れようとしているものです。各停止のための1つのグリッド。ここに4つのディプレイを持つ停止用の静的なサンプル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> 

グリッドを使用しても良いですか? rowdefinitionなどで各行を定義する必要があるようです。

ありがとうございます!

/R

+0

私は試してみませんか:あなたは2レベルの階段を持っていますオブジェクトの? trueの場合、「単純に」第1レベルのレベルにバインドされたItemsControlを使用し、オブジェクトの第2レベルにバインドされた別のitemscontrolを持つデータテンプレートを追加します。理解できるようにOMコードを貼り付けることはできますか? –

+0

が更新されました。steve b :) – Richard

答えて

3

編集:今では私はテンプレートを調整し、あなたのコードを掲示していること。途中で "Departures"のスペルミスがありました。 "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; 

一般的なアプローチは、ここで私はそのItemTemplateヘッダと別のItemsControlが含まれているItemsControlを使用し、ネストされたDataTemplatesを定義する必要があります:

<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

あなたはまだ3つのブロックがどこから来ているのかは特定しませんでしたが、これを超えるものは間違いなくあなたの問題です...

+0

+1これは解決策の参考になるためです。しかし、SilverlightとWindows-Phone-7のタグが付いています。SilverlightにはIsSharedSizeScopeはありません。 WP7デバイスのフォームファクタがわずかであるため、WP7アプリケーションとして見てより慎重なサイジングは許容されます。 – AnthonyWJones

+0

ああ、私はそれを知らなかった...(私はこれまでのところSilverlightで何もしていないので、すべての違いは分かりません) –

+0

完璧に作業しました!答えは百万円ありがとう(とスペルのヒント):) – Richard