10

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

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

感谢您的任何见解。

4

2 回答 2

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>
于 2009-10-16T01:21:17.257 回答
15

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

<ItemsControl ItemsSource="{Binding Something}" ItemTemplate="{StaticResource YourDataTemplate}">
  <ItemsControl.ItemsPanel>
    <ItemsPanelTemplate>
      <WrapPanel />
    </ItemsPanelTemplate>
  </ItemsControl.ItemsPanel>
</ItemsControl>
于 2009-10-16T01:17:54.117 回答