将ObservableCollection项绑定到WrapPanel中的UserControl?

jri*_*sta 9 c# data-binding wpf wrappanel mvvm

我可能只是遗漏了一些明显的东西,所以如果这是一个非常愚蠢的问题我会道歉.我在视图中有一个WrapPanel,我需要绑定到ViewModel上的ObservableCollection.此ObservableCollection包含一种不同类型的ViewModel,当在WrapPanel中显示时,需要将其绑定到另一种类型的视图.目标是创建一个可以包装的项目列表,每个项目都通过一个较小的视图实例显示,该视图应该添加到WrapPanel.

我正在使用MVVM,而ViewModel无法直接访问View.如果可能的话,我宁愿不在ViewModel和View之间创建绑定,因此手动将项添加到WrapPanel.Children集合不是一个可行的选择.我不知道如何将一个子ViewModel对象的集合绑定到WrapPanel,以便创建另一个视图的实例并将它们添加到自身.我只是错误地解决了这个问题吗?我认为可能涉及DataTemplate,但WrapPanel似乎没有DataTemplate,也不是可绑定的.

感谢您的任何见解.

And*_*erd 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>
Run Code Online (Sandbox Code Playgroud)


ito*_*son 14

使用ItemsControl,并将其ItemsPanel设置为WrapPanel:

<ItemsControl ItemsSource="{Binding Something}" ItemTemplate="{StaticResource YourDataTemplate}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)