与CollectionViewSource绑定

SRM*_*SRM 5 c# data-binding wpf collectionviewsource

我正在尝试使用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>
Run Code Online (Sandbox Code Playgroud)

此组合框所在的用户控件的DataContext绑定到一个对象,该对象具有名为Configurations的ObservableCollection,并且每个配置都有一个名为AgencyName的属性.我已经证实使用没有cvs的标准绑定可以正常工作,所以我知道在那个协议中一切都很好.

任何帮助都会非常感激,因为我找不到我的老板的借口:).我也不想下载代码并在后面的代码中进行排序(我可以在构建ObservableCollection时使用,但是违反DRY原则的恕我直言).

Sim*_* D. 4

“每当其他盒子之一发生变化时,所有其他盒子都会发生变化以反映”到底是什么意思?您是在谈论 SelectedItem 吗?如果是这样,那么它可能有助于IsSynchronizedWithCurrentItem = false在您的组合框中进行设置。

除此之外:我认为只要您在后面的代码中创建并排序 ICollectionView 一次,就不会违反 DRY 原则,因为您在 XAML 中不再需要做更多的事情。但我发现可能还有其他原因说排序等功能应该在视图中完成,从模型-视图-视图模型的角度来说。