c# wpf data-binding mvvm wrappanel

c# - ¿Enlazar elementos ObservableCollection a UserControl en WrapPanel?



wpf data-binding (2)

Lo que necesita es un ListView que use un WrapPanel para alojar todos los elementos.

<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>

Puede que me esté perdiendo algo obvio aquí, así que me disculpo si esta es una pregunta realmente tonta. Tengo un WrapPanel en una vista que necesito vincular a un ObservableCollection en ViewModel. Este ObservableCollection contiene un tipo diferente de ViewModel que debe vincularse a otro tipo de vista cuando se muestra en el WrapPanel. El objetivo es crear una lista envolvente de elementos, cada uno de los cuales se muestra mediante una instancia de una vista más pequeña que se debe agregar al WrapPanel.

Estoy usando MVVM, y ViewModel no tiene acceso directo a la Vista. Preferiría no crear un enlace entre ViewModel y View si fuera posible, por lo que agregar manualmente elementos a la colección WrapPanel.Children no es una opción viable. No entiendo cómo puedo vincular una colección de objetos secundarios de ViewModel al WrapPanel de tal forma que cree instancias de otra vista y las agregue a sí misma. ¿Estoy simplemente abordando el problema incorrectamente? Me imagino que probablemente haya un DataTemplate involucrado, pero no parece que un WrapPanel tenga un DataTemplate, ni es enlazable.

Gracias por cualquier idea.


Use un ItemsControl, y configure su ItemsPanel en un WrapPanel:

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