2012-01-17 4 views
0

ItemsControl ItemsSourceバインディングプロパティなしでCanvas Childrenプロパティを設定する手段はありますか?ItemsControl ItemsSourceバインディングプロパティを持たないCanvas Childrenプロパティを設定する

viewmodelから私のビューを分離するために、私はアイテムをバインドする必要があります。 私は、ドラッグ&ドロップのためにキャンバスを使用しています「CodeProjectの」

http://www.codeproject.com/KB/WPF/WPFDiagramDesigner_Part2.aspx

からデザイナーとしてのキャンバスを使用していました。私がキャンバスの中で手動で作業するときにうまく動作します。私が追加し

myCanvas.Children.Add(userControl); 
myCanvas.Children.Remove(userControl); 

を使用して子項目を削除しかし、私は、実行時に私のユーザーコントロールをロードした場合、彼らはちょうどビューとして読み込まれていることを意味 。

<s:Canvas AllowDrop="True" > 

    <ItemsControl Grid.Row="1" ItemsSource="{Binding Path=userControls}"> 

     <ItemsControl.ItemsPanel>       
      <ItemsPanelTemplate> 
       <s:Canvas Background="Transparent"/>         
      </ItemsPanelTemplate> 
     </ItemsControl.ItemsPanel> 

     <ItemsControl.ItemTemplate> 
      <DataTemplate>         
       <s:ControlItem Content="{Binding Path=MyView}"></s:ControlItem > 
      </DataTemplate> 
     </ItemsControl.ItemTemplate> 

     <ItemsControl.ItemContainerStyle> 
      <Style> 
       <Setter Property="Canvas.Left" Value="{Binding Path=X}" /> 
       <Setter Property="Canvas.Top" Value="{Binding Path=Y}" /> 
      </Style> 
     </ItemsControl.ItemContainerStyle> 

    </ItemsControl> 

    </s:Canvas> 
+1

Children.Addについてどうですか? –

+0

@HMO私の編集した答えを見てください – Rachel

答えて

1

いいえ、ありません。 (手動でクリアして追加する場合を除き...)

0

Ummm yeahはキャンバスの中にアイテムを描画しますか? :)

<Canvas> 
    <TextBlock Text="I'm Child #1" /> 
    <TextBlock Text="I'm Child #2" Canvas.Top="50" /> 
</Canvas> 

それとも常に編集は、コードビハインド

myCanvas.Children.Add(myTextBlock); 

foreach(var someControl in SomeControlList) 
    myCanvas.Children.Add(someControl); 

でそれを行うことができます

私はあなたの更新を参照してください、あなたが求めているものは考えています。アイテムをキャンバスにドラッグ&ドロップする場合は、手動でキャンバスにアイテムを追加/削除するよりも、アイテムを追加/削除するほうが良いでしょう(ItemsSource)。 myCanvasからコレクションを追加/削除するだけでコレクションが更新されませんItemsSource

Bea Stollnitz's article on dragging/dropping databound Itemsをご覧ください。つまり、ItemsControlのままにしておくことになりますが、Canvasの上にアイテムをドロップすると、そのオブジェクトの後ろにあるDataItemがというObservableCollection<MyDataItem>に追加されます(この名前が気に入らないアイテムにはUIアイテムが含まれています)。

関連する問題