我目前有一个填充了 ItemsSource 绑定到 ObservableCollection 的 GridView。
它按我的意图显示项目,但我想在最后手动添加一个外观和行为不同的项目。有没有办法在不修改 ItemsSource 绑定的 ObservableCollection 的情况下做到这一点?
我目前有一个填充了 ItemsSource 绑定到 ObservableCollection 的 GridView。
它按我的意图显示项目,但我想在最后手动添加一个外观和行为不同的项目。有没有办法在不修改 ItemsSource 绑定的 ObservableCollection 的情况下做到这一点?
有两种方法:
使用 MVVM 将从模型层提取原始集合,并将附加项添加到视图模型中。它的工作原理是您可以考虑仅视图所需的附加项目,例如,您需要在其中添加“以上所有内容”的投票选项列表。
有两个集合,分开,然后IValueConverter
在绑定ItemsSource
. 这种方法更加棘手,并且仅在您需要将两个集合分开和组合时才真正有用,例如,一个集合中的项目列表和另一个集合中的项目类别列表但也组合在一起。
我已经在一个广泛使用的大型 WPF 应用程序中成功地使用了这两种方法。
编辑:阅读有关问题的评论,如果您确实意味着您想要附加项目的不同视觉或行为,您可以使用 SelectorDataTemplateSelector
和/或ItemContainerStyleSelector
. 我最近成功地使用了选项#2 和模板选择的组合。
一些选项:
使用 CompositeCollection,您可以定义这是 xaml。不确定它是否能解决问题,您可能需要尝试一下
在后台创建一个新集合,其中填充了您的集合中的项目 + 额外项目。
编写一个转换器,然后创建一个新集合(或返回一个 IEnumerable)并添加新项目。
我想所有这些选项都有一个共同的主题,因为它们都是一个新系列。你基本上不能直接绑定到原始集合,因为它没有额外的项目,所以你必须以某种形式绑定到其他东西。