2010-12-16 3 views
1

シルバーライトTreeViewのアイテムのソースはOrderのアイテムがあり、それぞれOrderにはOrderItemsCommissionsという2つのコレクションがあります。だから私は一種の各アイテムのSilverlightツリービュー内で定義済みヘッダーを使用するにはどうすればよいですか?

Order #1 
    - Order Items 
     - Order Item #1 
     - Order Item #2 
     - Order Item #3 
    - Commissions 
     - Commission #1 
     - Commission #2 
     - Commission #3 
     - Commission #4 

などのように見えるツリービューをしたいのでこれまで注文は注文品コミッションヘッダーを持つことになり、これらの内容は、データバインドされています。たとえそれが一種のように思えますが、私はこれで困っています。

これまでのXAMLです。明らかに、OrderItemsCommissionsItemsコレクションのHierarchicalDataTemplateを作成するのは簡単ですが、上記のHDTのItemsSourceはどうすれば設定できますか?言い換えれば、[何がここに来るのですか?]はどのように見えますか?

<Grid> 
     <Grid.Resources>     
      <sdk:HierarchicalDataTemplate 
       x:Key="OrdersTreeLevel0" 
       ItemsSource="{StaticResource [what goes here?]}" 
       ItemTemplate={StaticResource OrdersTreeLevel1}"> 

        <TextBlock 
         FontWeight="{Binding IsUnread}" 
         Text="{Binding Id, StringFormat='Order #{0}'}" /> 

      </sdk:HierarchicalDataTemplate> 
     </Grid.Resources> 

     <sdk:TreeView 
      ItemsSource="{Binding Items}" 
      ItemTemplate="{StaticResource OrdersTreeLevel0}"> 
     </sdk:TreeView> 

    </Grid> 

答えて

0

これはOrderオブジェクトを取り、NameItems性質を運ぶ型の配列に変換するためにあなたは、値変換をする必要があります: -

public class ItemWrapper 
{ 
    public string Name {get; set; } 
    public IEnumerable Items {get; set;} 
} 

public class OrderConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     Order order = value as Order; 
     if (order != null) 
     { 
      List<object> result = new List<object>(); 
      result.Add(new ItemWrapper() {Name = "Order Items", Items = order.OrderItems}); 
      result.Add(new ItemWrapper() {Name = "Commission Items", Items = order.CommissionItems}); 
     } 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

今、あなたがこのコンバータを追加 -

<Grid.Resources> 
     <local:OrderConverter x:Key="OrderConverter" />      
     <sdk:HierarchicalDataTemplate  
      x:Key="OrdersTreeLevel0"  
      ItemsSource="{Binding Converter=OrderConverter}"  
      ItemTemplate={StaticResource OrdersTreeLevel1}">  

       <TextBlock  
        FontWeight="{Binding IsUnread}"  
        Text="{Binding Id, StringFormat='Order #{0}'}" />  

     </sdk:HierarchicalDataTemplate>  
    </Grid.Resources> 

もちろん、簡単なビット、本当にトリッキーなビットが必要な場合はそれですCommissionおよびOrderItemの異なるテンプレート。これらの両方がNameのような共通の単純なプロパティを持つ場合、level2の単一のテンプレートで十分です。さもなければ事はより複雑になる。

関連する問題