我正在尝试使用 CollectionViewSource 实现一些组合框排序。该组合框实际上是数据模板的一部分,并在列表视图中重复出现。我的第一种方法似乎有效(使用 CollectionViewSource),但我的所有组合框共享相同的数据上下文。这使得每当其他盒子之一发生变化时,所有其他盒子都会发生变化以反映 - 这不是期望的副作用。
我决定回过头来尝试使用内联 xaml 来指定 CollectionViewSource(而不是将 cvs 创建为静态资源)来实现基本组合框(不在数据模板内)。我无法成功显示我的数据。我的想法可能完全错误,因为我对 WPF 还很陌生。
这是我的组合框的 xaml:
<ComboBox>
<ComboBox.ItemsSource>
<Binding>
<Binding.Source>
<CollectionViewSource Source="{Binding Path=Configurations}">
<CollectionViewSource.SortDescriptions>
<scm:SortDescription PropertyName="AgencyName" />
</CollectionViewSource.SortDescriptions>
</CollectionViewSource>
</Binding.Source>
</Binding>
</ComboBox.ItemsSource>
</ComboBox>
此组合框所在的用户控件的 DataContext 绑定到一个对象,该对象具有名为 Configurations 的 ObservableCollection,并且每个配置都有一个名为 AgencyName 的属性。我已经验证,使用没有 cvs 的标准绑定可以正常工作,所以我知道一切都很好。
任何帮助将不胜感激,因为我已经没有借口给我的老板了:)。我也不想进入代码并在后面的代码中进行排序(当我构建 ObservableCollection 时我可以这样做,但恕我直言,这违反了 DRY 原则)。
“每当其他盒子之一发生变化时,所有其他盒子都会发生变化以反映”到底是什么意思?您是在谈论 SelectedItem 吗?
如果是这样,那么它可能有助于设置IsSynchronizedWithCurrentItem = false
在你的组合框中。
除此之外:我认为只要您在后面的代码中创建并排序 ICollectionView 一次,就不会违反 DRY 原则,因为您在 XAML 中不再需要做更多的事情。但我发现可能还有其他原因说排序等功能应该在视图中完成,从模型-视图-视图模型的角度来说。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)