【问题标题】:WPF - MVVM - Binding/Displaying <ObjectType>.Property to multiple columns [duplicate]WPF - MVVM - 绑定/显示 <ObjectType>.Property 到多列[重复]
【发布时间】:2018-09-01 10:13:05
【问题描述】:

更新:Basically Identical Question

我有一个ObservableCollection,类型为&lt;Item&gt;&lt;Item&gt; 对象具有 properties Id、名称和描述。

在 WPF 中,我有一个 UserControl 我想将 databind ObservableCollection&lt;Item&gt; 发送到并仅显示名称。这很容易,对吧?我同意。但是,我想跨三列显示名称。

下面我将展示典型行为与所需行为之间的基本区别(在 Excel 中绘制)。它显示了五个项目的列表,按照它们出现在ObservableCollection 中的假定顺序。

过去,我的解决方案是将ObservableCollection 拆分为三个独立的ObservableCollections。然后我将databound 分别转换为自己的ItemsControl,但我很确定这个过程会影响性能(除其他外)......

那么 S.O.,我该如何正确执行此操作?任何帮助表示赞赏!

【问题讨论】:

  • 谢谢!几周前我偶然发现了一个类似的页面,但当时我正在寻找一个不同的问题。我可以很快根据相关链接中的解决方案提供一个解决方案,除非有人比我更胜一筹!

标签: c# wpf mvvm data-binding mvvm-light


【解决方案1】:

@Ron Beyer 在上面的问题评论部分提供了一个相关的问题链接。虽然问题本身用于不同的目的,但它的答案有助于回答我自己的问题。

基本上,答案是在ItemsPanelTemplate 中使用&lt;UniformGrid Columns="###"&gt;。我之前用的是&lt;StackPanel HorizontalAlignment="Stretch" Width="Auto" /&gt;

<ItemsControl ItemsSource="{Binding ItemList}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
             <UniformGrid Columns="3" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

或者...如果我们也绑定列数...:

<ItemsControl ItemsSource="{Binding ItemList}">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
             <UniformGrid Columns="{Binding ColumnAmount}" />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
</ItemsControl>

再次感谢Ron Beyer 和他的回答者mm8

【讨论】:

  • 不需要再回答了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多