簡體   English   中英

將 WPF Canvas 子項綁定到 ObservableCollection

[英]Binding WPF Canvas Children to an ObservableCollection

在我的 WPF 應用程序中,我有一個畫布,可以在其中進行一些繪圖。 早些時候我在后面的代碼中處理了繪圖,但現在我已將所有內容分解為 ViewModel。 這給了我一些挑戰..

我有幾個 InkPresenter 對象持有 Strokes。 早些時候,我將它們作為子項添加到后面的代碼中的畫布中 - 像這樣:

// Build an InkPresenter: 
var someInkPresenter = BuildInkPresenter(..); 
//_myCanvas is the <Canvas> I want to display it in: 
_myCanvas.Children.Add(someInkPresenter); 

現在 - 不在包含 _myCanvas 的 XAML 的代碼隱藏中構建 InkPresenter 我需要以不同的方式執行此操作。 我想做的是創建一個 InkPresenter 並將其添加到一個集合中:

public ObservableCollection<InkPresenter> Drawings;

我現在的問題是如何將畫布綁定到此 ObservableCollection - 並在添加到集合時顯示 InkPresenter。 我可以以某種方式使用數據綁定來實現這一點嗎?

我認為你可以用ItemsControl + ItemsPanelTemplate做到這一點。 像這樣:

<ItemsControl ItemsSource="{Binding YourCollection}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

要閱讀有關此方法的更多信息,請參閱 Dr.WPF: ItemsControl: A to Z ( P is for Panel )

Anvaka 建議的解決方案很棒,但正如 John Bowen 指出的,如果您想將項目實際綁定到 Canvas 附加屬性,您需要了解更多信息。

下面是一個關於如何綁定到 Canvas.Left 和 Canvas.Top 的示例:

<ItemsControl ItemsSource="{Binding YourCollection}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="ContentPresenter">
            <Setter Property="Canvas.Left" Value="{Binding YourModelLeft}" />
            <Setter Property="Canvas.Top" Value="{Binding YourModelTop}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

順便說一句,在我嘗試了 Anvaka 的建議后,我找到了這個問題的解決方案,但綁定不起作用。

希望這可以幫助其他人,尋找相同的答案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM