Лучший способ, который я знаю, - это использовать некоторую коллекцию оболочек, которая внутренне «получает» нужную коллекцию.
Итак, у вас есть UnfilteredCollection и FilteredCollection, а затем свойство BindingCollection, которое в своем «получателе» оценивает некоторое состояние (флажок будет привязан к этому состоянию), чтобы определить, какую коллекцию следует извлечь.
Если вы используете MVVM для привязки данных между пользовательским интерфейсом и коллекциями, один из способов сделать это будет следующим:
<!-- Your ComboBox binds to some shell collection -->
<ComboBox ItemsSource="{Binding BindingCollection}" />
<!-- The input to this item will determine which collection is internally exposed -->
<CheckBox IsChecked="{Binding UseFilteredSet}" />
И затем ваш файл ViewModel (среднего уровня) выполняет что-то вроде этого (я не включаю подробности реализации INotifyPropertyChanged, но могу, если хотите):
private ObservableCollection<MyCustomer> UnfilteredCollection
{
get { return _unfilteredCollection; }
}
private ObservableCollection<MyCustomer> FilteredCollection
{
get { return _filteredCollection; }
}
// The public collection to which your ComboBox is bound
public ObservableCollection<MyCustomer> BindingCollection
{
get
{
return UseFilteredSet ?
FilteredCollection :
UnfilteredCollection;
}
}
// CheckBox is bound to this state value, which tells the bindings on the shell
// collection to refresh when the value of this state changes.
public bool UseFilteredSet
{
get { return _useFilteredSet; }
set
{
_useFilteredSet = value;
OnPropertyChanged("UseFilteredSet");
OnPropertyChanged("BindingCollection");
}
}