2013-05-08 113 views
1

對不起,標題有點模糊,但我不能想出一個更好的。將圖形添加到畫布。如何綁定到VM

爲了討論起見,我們假設我正在開發一個簡單的繪圖應用程序,用戶只需點擊並拖動繪製一條線(我沒有真正開發它,只是爲了保持簡單)。

我有繪製線的自定義形狀。現在我想根據需要在視圖中添加新行,但是我希望通過視圖模型上的數據綁定使用ObservableCollection屬性來完成此操作。 Usaully我會使用ItemsControl。但當然ItemsControl自動定位它的項目,這不是我想要的。

有沒有人有一個想法如何做到這一點?有沒有辦法禁用ItemsControl的佈局功能?

回答

3

可以更改ItemsControlItemsPanelTemplate所以它採用了Canvas,而不是一個StackPanel保持其項目,然後用ItemContainerStyle綁定Canvas.TopCanvas.Left屬性的數據對象放置它們。

<ItemsControl ItemsSource="{Binding MyCollection}"> 
    <!-- ItemsPanelTemplate --> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas /> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 

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

我有關於更詳細的ItemsControl是如何工作的,如果你有興趣解釋ItemsControl一個博客文章。