2011-08-07 21 views
2

リストのリストを何らかの形でキャバスパネルにバインドすることが可能かどうか疑問に思っていました。例えば、それ自体が「矩形」オブジェクトのリストであるオブジェクト「レイヤー」を有する。レイヤーのリストをキャンバスにバインドすることは可能でしょうか?これまでは、SelectMany関数を使用して入れ子リストの平坦化されたINumerableをitemcontrolにバインドするしかありませんでしたが、これは十分ではありません.Idは "レイヤー"を分離して保持し、長方形のZindexをそれがあるレイヤーは、レイヤーを簡単に並べ替えることができます。ネストされたリストをWPFキャンバスパネルにバインドする

また、ネストされたitemcontrolを試してみましたが、期待通りに最初のレイヤーしか表示しません。目的は、キャンバス上の各レイヤーにあるすべてのオブジェクトの四角形を描画して、レイヤーの操作、各レイヤー内の新しいオブジェクトの挿入などを可能にすることです。

ありがとうございます! :)

答えて

3

メインアイテムのItemTemplateを作ってみましょう別のアイテムコントロールを別のキャンバスにItemsPanelとしますか? (私は最初のレイヤーだけを表示すべき理由は見当たりません)

実際、主なItemsControlはCanvasである必要はありません。グリッドも同様ですZオーダー、グリッドを使用する場合、レイヤーの順序はコレクションの外観と同じです)。

例(ビット冗長それについて何もすることはできません):H.B同様

<ItemsControl ItemsSource="{Binding Data}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <ItemsControl ItemsSource="{Binding LayerItems}"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <Canvas /> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemContainerStyle> 
        <Style TargetType="{x:Type ContentPresenter}"> 
         <!-- Here would the binding to some properties that take care of placement --> 
         <Setter Property="Canvas.Top" Value="{Binding Top}" /> 
         <Setter Property="Canvas.Left" Value="{Binding Left}" /> 
        </Style> 
       </ItemsControl.ItemContainerStyle> 
       <ItemsControl.ItemTemplate> 
        <!-- Some template for the individual items --> 
        <DataTemplate> 
         <Border Padding="5" BorderThickness="1" BorderBrush="Red" CornerRadius="3" 
           Background="White"> 
          <TextBlock Text="{Binding Name}" /> 
         </Border> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

ありがとうございます!これは私が実装しようとしていた初期の解決策でしたが、私は間違ったことをしていたと思います。今はうまくいきます、もう一度感謝します。 – ssaammuueell

+0

あなたが大歓迎です、それは喜んで助けた:) –

0

は、私はあまりにも、それは動作しません理由を見ることができない、と述べました。 ItemsControlを別のItemsContainerに入れても問題ありません。

<ItemsControl ItemsSource="{Binding Layers}"> 
    <ItemsControl.ItemsContainerStyle> 
    <Style> 
    <Setter Property="Template"> 
     <Setter.Value> 
     <ControlTemplate> 
     <ItemsControl ItemsSource="{Binding Rectangles}"/> 
     </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
    </Style> 
    <ItemsControl.ItemsContainerStyle> 
</ItemsControl> 

しかし、それは、ItemsContainerStyleを変更することなく、あなたのアイテムのDataTemplate内のサブItemsControlを置くためにきれいになると思います。私はあなたのコントロールがRectanglesにバインドするために必要な、モデルのプロパティに関する情報を知る必要がある場合、その悪いデザインだと思います。

関連する問題