.
Проблема с вашим кодом заключается в том, что каждый ComboBox использует один и тот же экземпляр CollectionViewSource ;это означает, что ресурс с ключом «DetailScopes» является общим для всех ComboBox, поэтому, когда вы выбираете одно значение из определенного ComboBox, он автоматически выбирает одно и то же значение во всех ComboBox. Это потому, что базовая коллекция, которая является общей, отслеживает выбранный элемент и поскольку она изменяется при выборе из одного ComboBox, CollectionViewSource уведомляет об изменении ALL ComboBox .
Итак, решениеэто очень просто.Все, что вам нужно, чтобы ресурс DetailScopes нерушимый .
Вот исправление:
<!-- Please note this x:Shared="False" just after x:Key="DetailsScopes" --->
<CollectionViewSource x:Key="DetailScopes" x:Shared="False">
<CollectionViewSource.Source>
<ObjectDataProvider
MethodName="GetValues"
ObjectType="{x:Type system:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="entities:DetailScope" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</CollectionViewSource.Source>
</CollectionViewSource>
Надеюсь, это решит вашу проблему!
Однако этоРешение вызовет другую проблему.Позвольте мне кое-что процитировать из MSDN, чтобы вы поняли, что делает x: Shared.
x: Общий атрибут
Если задано значение false, изменяет поведение поиска ресурсов WPF так,который запрашивает атрибутированный ресурс , создает новый экземпляр для каждого запроса вместо совместного использования одного и того же экземпляра для всех запросов.
, поскольку x: Shared вызывает создание нового экземпляра (aновая копия) ресурса всякий раз, когда вы пытаетесь получить к нему доступ, это означает, что метод обработчика фильтра присоединяется только к экземпляру, который вы получаете в коде, а не ко всем экземплярам.
Итак, чтобыДля правильной работы вашего обработчика вам необходимо подключить обработчик из самого XAML, например:
<!-- Now please note Filter="DetailsScopesFilter" --->
<CollectionViewSource x:Key="DetailScopes" x:Shared="False" Filter="DetailScopesFilter">
<CollectionViewSource.Source>
<ObjectDataProvider
MethodName="GetValues"
ObjectType="{x:Type system:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="entities:DetailScope" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</CollectionViewSource.Source>
</CollectionViewSource>
Надеюсь, он решит все ваши проблемы.Дайте мне знать, если вы все еще сталкиваетесь. :-)
Да, кстати, следующий код больше не нужен.Поэтому, пожалуйста, удалите его.
// Attach filter to the collection view source
detailScopes = this.Resources["DetailScopes"] as CollectionViewSource;
detailScopes.Filter += new FilterEventHandler(DetailScopesFilter);
.