static void SelectedItem_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) { ComboBoxAdaptor adapter = (ComboBoxAdaptor)d; if (adapter.ItemsSource != null) { //If SelectedItem is changing from the Source (which we can tell by checking if the //ComboBox.SelectedItem is already set to the new value), trigger Adapt() so that we //throw out any items that are not in ItemsSource. object adapterValue = (e.NewValue ?? adapter.NullItem); object comboboxValue = (adapter.ComboBox.SelectedItem ?? adapter.NullItem); if (!object.Equals(adapterValue, comboboxValue)) { adapter.Adapt(); adapter.ComboBox.SelectedItem = e.NewValue; } //If the NewValue is not in the CollectionView (and therefore not in the ComboBox) //trigger an Adapt so that it will be added. else if (e.NewValue != null && !adapter.CollectionView.Contains(e.NewValue)) { adapter.Adapt(); } } }
static void AllowNull_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) { ComboBoxAdaptor adapter = (ComboBoxAdaptor)d; adapter.Adapt(); }
static void ItemsSource_Changed(DependencyObject d, DependencyPropertyChangedEventArgs e) { ComboBoxAdaptor adapter = (ComboBoxAdaptor)d; adapter.Adapt(); }