2010-06-28 94 views
3

我在我的類中有一個畫布屬性,我想知道是否可以將它綁定到xaml中的畫布?綁定到畫布

數據綁定如何在畫布中工作?

<Canvas ItemSource="{Binding ClassCanvas}" /> 
+0

請提供更多詳情。 – SLaks 2010-06-28 19:21:01

+0

我更新了我的問題。 – Robert 2010-06-28 20:13:27

回答

3

如果你想在XAML定義你的畫布,包括你的類作爲單個項目整個畫布,你可以寫:

<Canvas> 
    <ContentPresenter Content="{Binding ClassCanvas}" /> 
    ... other items here ... 
</Canvas> 

如果你想在XAML定義你的畫布,包括所有相同的UI元素作爲在您的類中定義的Canvas,這是不可能的,因爲UIElement只能有一個UIElement父類。因此,如果類中定義的Canvas是給定UIElement的父類,則在XAML中定義的Canvas不可以。

如果你希望你的畫布,從各的UIElement在你的類中定義的畫布顯示數據,可以用帆布板和一個DataTemplate有一個ItemsControl做到這一點:

<ItemsControl ItemsSource="{Binding ClassCanvas.Children}"> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <Canvas /> 
    </ItemsPanelTemplate> 
    </ItemsControl> 
    <ItemsControl.ItemsContainerStyle> 
    <Style> 
     <Setter Property="Canvas.Left" Value="{Binding (Canvas.Left)}" /> 
     <Setter Property="Canvas.Left" Value="{Binding (Canvas.Top)}" /> 
     <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
      ... display of UIElement here, either using VisualBrush or custom display 
      </ControlTemplate> 
     <Setter.Value> 
     </Setter> 
    </Style> 
    </ItemsControl.ItemsContainerStyle> 
</ItemsControl> 

請注意,這段代碼由於它不是INotifyCollectionChanged集合,因此只掃描一次Children屬性。

如果要綁定到包含具有Canvas.Top和Canvas.Left屬性集的UIElements集合的類中的屬性,那麼如果容器是ObservableCollection而不是Canvas,則可以輕鬆地執行此操作。

Canvas類從來沒有被設計用於你的數據層。我強烈建議你切換到在那裏使用ObservableCollection,並且只使用Canvas作爲視圖的一部分。

0

是的。

您可以綁定到畫布或任何其他對象。

+0

所以我可以在我的課堂上有一個畫布對象,並將其綁定到xaml中的畫布上?數據綁定將如何工作?我可以添加孩子到課堂上的畫布,這將改變在XAML? – Robert 2010-06-29 01:51:21

+0

你可以在你的類上設置'Canvas'對象來引用你的XAML中的畫布。 – SLaks 2010-06-29 02:00:36