2009-10-16 17 views
9

Ich kann nur etwas offensichtlich hier fehlen, so entschuldige ich mich, wenn das eine wirklich dumme Frage ist. Ich habe ein WrapPanel in einer Ansicht, die ich an eine ObservableCollection im ViewModel binden muss. Diese ObservableCollection enthält einen anderen Typ von ViewModel, der bei Anzeige im WrapPanel an einen anderen Ansichtstyp gebunden werden muss. Das Ziel besteht darin, eine Wrappbare Liste von Elementen zu erstellen, von denen jedes über eine Instanz einer kleineren Ansicht angezeigt wird, die dem WrapPanel hinzugefügt werden soll.ObservableCollection-Elemente an UserControl in WrapPanel binden?

Ich verwende MVVM, und das ViewModel hat keinen direkten Zugriff auf die Ansicht. Ich würde lieber nicht eine Bindung zwischen dem ViewModel und der Ansicht erstellen, wenn es überhaupt möglich ist. Daher ist das manuelle Hinzufügen von Elementen zur WrapPanel.Children-Auflistung keine praktikable Option. Ich weiß nicht, wie ich eine Sammlung untergeordneter ViewModel-Objekte so an das WrapPanel binden kann, dass sie Instanzen einer anderen Ansicht erstellen und sie sich selbst hinzufügen. Komme ich das Problem einfach falsch an? Ich denke, es ist wahrscheinlich ein DataTemplate beteiligt, aber es scheint nicht, dass ein WrapPanel eine DataTemplate hat, noch ist es bindbar.

Danke für jede Einsicht.

+0

Es klingt für mich wie Ihre haben eine Situation, wo Sie verschiedene Viewmodels alle in der gleichen Sammlung haben. Jedes dieser Ansichtsmodelle hat seine eigene zugeordnete Ansicht. Wenn Sie diese VMs in einem Container anzeigen, möchten Sie, dass jede Ansicht um eine zusätzliche Ebene gewickelt wird? (Wie ein gemeinsamer Rand um jedes einzelne Element?) –

+0

Die Sammlung enthält den gleichen Typ, in diesem Fall ServiceMonitorViewModel. Ich muss sie nur in einem Wrapper-Container in ihrer übergeordneten Ansicht anzeigen. – jrista

Antwort

19

Was Sie brauchen, ist ein Listview, die eine WrapPanel nutzt alle Elemente zu hosten.

+0

Danke für die Einsicht Andrew. Ich habe das gemacht und bin auf ein anderes Problem gestoßen. Ich hoffe, du kannst auch mit diesem helfen, sonst werde ich eine andere Frage stellen. Ich habe , mein UserControl, in die DataTemplate geworfen. Ich erhalte den folgenden Fehler: Es konnte keine Instanz vom Typ 'ServiceMonitorView' erstellt werden. Das Benutzersteuerelement hat keinen Code außerhalb des generierten Standardkonstruktors ... also sollte es keinen Konstruktorcode geben, der eine Ausnahme auslöst. – jrista

+0

@jrista: Ich würde sagen, dass das ein separates Problem ist, das zu einer unabhängigen Frage gehört. (Ich kenne die Antwort nicht, aber ich bin daran interessiert, was es wäre) –

14

Verwenden Sie ein Itemscontrol, und legen Sie seine Itemspanel zu einem WrapPanel:

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

Das ist genial .. Funktioniert super in silverlight ... – Anirudha

Verwandte Themen