【问题标题】:How can I manually add an item to GridView.Items after binding ItemsSource?绑定 ItemsSource 后如何手动将项目添加到 GridView.Items?
【发布时间】:2012-09-04 22:34:58
【问题描述】:

我目前有一个 GridView 填充了 ItemsSource 绑定到 ObservableCollection。

它按我的意图显示项目,但我想在最后手动添加一个外观和行为不同的项目。有没有办法在不修改 ItemsSource 绑定到的 ObservableCollection 的情况下做到这一点?

【问题讨论】:

  • 当您说外观和行为不同时,您更准确地说是什么意思?另一个DataTemplate
  • 基本上,网格将包含一堆图像,最后一个网格项显示“查看全部”。

标签: c# wpf data-binding windows-8 .net-4.5


【解决方案1】:

有两种方法:

  1. 使用 MVVM 将从模型层提取原始集合,并将附加项添加到视图模型中。它的工作原理是您可以考虑 only 视图所需的附加项目,例如例如,您需要在其中添加“以上所有内容”的投票选项列表。

  2. 有两个集合,分开,然后在绑定ItemsSource 时使用IValueConverter 将它们连接/连接在一起。这种方法更棘手,只有当您需要将两个集合分开和组合时才真正有用,例如一个集合中的项目列表和另一个集合中的项目类别列表,但也组合在一起。

我已经在一个广泛使用的大型 WPF 应用程序中成功地使用了这两种方法。

编辑:阅读有关问题的评论,如果您确实想要附加项目的不同视觉或行为,您可以使用选择器DataTemplateSelector 和/或@987654324 来实现@。我最近成功使用了选项 #2 和模板选择的组合。

【讨论】:

    【解决方案2】:

    一些选项:

    使用一个CompositeCollection,你可以定义这是xaml。不确定它是否能解决问题,您可能需要尝试一下

    在后台创建一个新集合,其中包含您集合中的项目 + 额外项目。

    编写一个转换器,然后创建一个新集合(或返回一个 IEnumerable)并添加新项目。

    我想所有这些选项都有一个共同的主题,因为它们都是一个新系列。你基本上不能直接绑定到原始集合,因为它没有额外的项目,所以你必须以某种形式绑定到其他东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-12
      • 2018-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多