2009-10-16 3 views
9

Я могу просто пропустить что-то очевидное здесь, поэтому я извиняюсь, если это очень глупый вопрос. У меня есть WrapPanel в представлении, что мне нужно связать с ObservableCollection на ViewModel. Этот ObservableCollection содержит другой тип ViewModel, который должен быть привязан к другому типу вида, когда отображается в WrapPanel. Цель состоит в том, чтобы создать пакетный список элементов, каждый из которых отображается через экземпляр меньшего вида, который должен быть добавлен в WrapPanel.Связанные объекты ObservableCollection для UserControl в WrapPanel?

Я использую MVVM, и ViewModel не имеет прямого доступа к представлению. Я бы предпочел не создавать привязку между ViewModel и View, если это вообще возможно, поэтому вручную добавление элементов в коллекцию WrapPanel.Children не является жизнеспособным вариантом. Я в недоумении относительно того, как я могу привязать коллекцию дочерних объектов ViewModel к WrapPanel таким образом, чтобы он создавал экземпляры другого представления и добавлял их себе. Я просто неправильно подхожу к проблеме? Я полагаю, что, вероятно, задействован DataTemplate, но не кажется, что WrapPanel имеет DataTemplate и не может быть привязан.

Спасибо за понимание.

+0

Это звучит так, как будто у вас есть ситуация, когда у вас разные модели просмотра в одной коллекции. Каждая из этих моделей просмотра имеет свой собственный вид. Когда вы показываете эти виртуальные машины в контейнере, вы хотите, чтобы каждое представление было завернуто на один дополнительный уровень? (Как разделительная граница вокруг каждого отдельного элемента?) –

+0

В коллекции содержится все тот же тип, в данном случае ServiceMonitorViewModel. Мне просто нужно отобразить их в контейнере-контейнере в родительском представлении. – jrista

ответ

19

Что вам нужно, это ListView, который использует WrapPanel для размещения всех элементов.

<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

Спасибо за понимание Andrew. Я сделал это и столкнулся с другой проблемой. Я надеюсь, вы тоже сможете помочь с этим, иначе я начну еще один вопрос. Я бросил , мой UserControl, в DataTemplate. Я получаю следующую ошибку: Не удалось создать экземпляр типа «ServiceMonitorView». Пользовательский элемент управления имеет нулевой код за пределами созданного по умолчанию, сгенерированного конструктора ... поэтому не должно быть никакого кода конструктора, генерирующего исключение. – jrista

+0

@jrista: Я бы сказал, что это отдельная проблема, которая принадлежит к независимому вопросу. (Я не знаю ответа, но меня интересует, что это будет) –

14

Используйте ItemsControl, и установите его ItemsPanel к WrapPanel:

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

Это потрясающе. Прекрасно работает в silverlight ... – Anirudha

 Смежные вопросы

  • Нет связанных вопросов^_^