【问题标题】:Binding ObservableCollection items to UserControl in WrapPanel?将 ObservableCollection 项绑定到 WrapPanel 中的 UserControl?
【发布时间】:2010-12-07 06:04:45
【问题描述】:

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

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

感谢您的任何见解。

【问题讨论】:

  • 在我看来,您有一种情况,即您在同一个集合中拥有不同的视图模型。这些视图模型中的每一个都有自己的关联视图。当您在容器中显示这些虚拟机时,您希望每个视图都被包装一个额外的级别吗? (就像每个单独元素周围的共同边界?)
  • 集合包含所有相同的类型,在本例中为 ServiceMonitorViewModel。我只需要将它们显示在其父视图中的可包装容器中。

标签: c# wpf data-binding mvvm wrappanel


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您需要的是一个使用 WrapPanel 来托管所有项目的 ListView。

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

    【讨论】:

    • 感谢安德鲁的洞察力。我已经这样做了,并且遇到了另一个问题。我希望你也能帮助解决这个问题,否则我会开始另一个问题。我将,我的UserControl,放入DataTemplate。我收到以下错误:无法创建“ServiceMonitorView”类型的实例。用户控件在默认生成的构造函数之外的代码为零……所以不应该有任何构造函数代码抛出异常。
    • @jrista:我想说这是一个单独的问题,属于一个独立的问题。 (我不知道答案,但我对它会是什么很感兴趣)
    猜你喜欢
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-22
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多