Связывание с 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>

Контекст данных пользовательского элемента управления, в котором находится это поле со списком, привязан к объекту, который имеет ObservableCollection под названием Configurations, и каждая конфигурация имеет свойство с именем AgencyName. Я проверил, что это работает нормально, используя стандартную привязку без cvs, поэтому я знаю, что с этим соглашением все в порядке.

Любая помощь будет принята с благодарностью, так как у меня закончились оправдания моему боссу :). Я тоже не Я не хочу, чтобы пришлось погрузиться в код и выполнить сортировку в коде позади (что я мог бы, когда я создал ObservableCollection, но ИМХО, который нарушает принцип DRY).

5
задан Dan J 1 March 2011 в 23:55
поделиться