2009-10-16 132 views
9

我可能只是在這裏丟失了一些明顯的東西,所以我很抱歉如果這是一個非常愚蠢的問題。我在視圖中有一個WrapPanel,我需要綁定到ViewModel上的ObservableCollection。這個ObservableCollection包含一個不同類型的ViewModel,它在WrapPanel中顯示時需要綁定到其他類型的視圖。目標是創建一個可打包的項目列表,每個項目都通過一個應該添加到WrapPanel的較小視圖實例來顯示。將ObservableCollection項綁定到WrapPanel中的UserControl?

我正在使用MVVM,ViewModel沒有直接訪問視圖。如果可能,我寧願不在ViewModel和View之間創建綁定,因此手動向WrapPanel.Children集合添加項目不是可行的選項。我不知道如何將一組子ViewModel對象綁定到WrapPanel,這樣它將創建另一個視圖的實例並將它們添加到它自己。我是否錯誤地解決了這個問題?我認爲可能有一個DataTemplate涉及,但它並不表示WrapPanel有一個DataTemplate,也不是可綁定的。

感謝您的任何見解。

+0

這聽起來像你有一種情況,你有不同的viewmodels所有在同一集合。每個視圖模型都有自己的關聯視圖。當你在一個容器中顯示這些虛擬機時,你希望每個視圖被包裝一個額外的級別? (就像每個單獨元素周圍的邊框一樣?) – 2009-10-16 07:05:16

+0

集合包含所有相同類型,在本例中爲ServiceMonitorViewModel。我只需要將它們顯示在父視圖的可打包容器中。 – jrista 2009-10-16 08:31:09

回答

19

你需要的是一個使用WrapPanel主辦的所有項目的一個ListView。

<ListView ItemsSource={...}> 
    <ListView.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel IsItemsHost="True" /> 
    </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
     <!-- Fill in how you want each item to look here --> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 
+0

感謝您的洞察力安德魯。我已經這樣做了,並且遇到了另一個問題。我希望你也可以幫助解決這個問題,否則我會提出另一個問題。我在DataTemplate中扔了我的UserControl的。我收到以下錯誤:無法創建類型爲「ServiceMonitorView」的實例。用戶控件在默認的生成構造函數之外有零代碼...所以不應該有任何構造函數代碼拋出異常。 – jrista 2009-10-16 01:26:40

+0

@jrista:我會說這是一個獨立的問題,屬於一個獨立的問題。 (我不知道答案,但我對它會是什麼感興趣) – 2009-10-16 01:52:17

14

使用一個ItemsControl,並設置其ItemsPanel到WrapPanel:

<ItemsControl ItemsSource="{Binding Something}" ItemTemplate="{StaticResource YourDataTemplate}"> 
    <ItemsControl.ItemsPanel> 
    <ItemsPanelTemplate> 
     <WrapPanel /> 
    </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
</ItemsControl> 
+0

這真是太棒了..在Silverlight的偉大工程... – Anirudha 2013-10-01 14:54:02

相關問題