我在我的類中有一個畫布屬性,我想知道是否可以將它綁定到xaml中的畫布?綁定到畫布
數據綁定如何在畫布中工作?
<Canvas ItemSource="{Binding ClassCanvas}" />
我在我的類中有一個畫布屬性,我想知道是否可以將它綁定到xaml中的畫布?綁定到畫布
數據綁定如何在畫布中工作?
<Canvas ItemSource="{Binding ClassCanvas}" />
如果你想在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作爲視圖的一部分。
請提供更多詳情。 – SLaks 2010-06-28 19:21:01
我更新了我的問題。 – Robert 2010-06-28 20:13:27