// bind the DisplayMemberPath to DisplayMemberPath of the two list boxes private static void DisplayMemberPathPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { MultiSelectControl control = sender as MultiSelectControl; if (control == null) { return; } control.AvailableListBox.DisplayMemberPath = control.DisplayMemberPath; control.SelectedListBox.DisplayMemberPath = control.DisplayMemberPath; }
// get a handle on the default view for Available list box and set filter private static void ItemsSourcePropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { IEnumerable source = e.NewValue as IEnumerable; MultiSelectControl control = sender as MultiSelectControl; if (source == null || control == null) { return; } control.availableItemsCollectionView = CollectionViewSource.GetDefaultView(source); control.availableItemsCollectionView.Filter = new Predicate <object>(control.FilterOutItems); }
// get a handle on the default view for Selected list box and set filter private static void SelectedItemsPropertyChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e) { IList source = e.NewValue as IList; MultiSelectControl control = sender as MultiSelectControl; if (source == null || control == null) { return; } control.selectedItemsCollectionView = CollectionViewSource.GetDefaultView(source); control.selectedItemsCollectionView.Filter = new Predicate <object>(control.FilterOutSelectedItems); // refresh the available items list to ensure that it shows correct data control.availableItemsCollectionView.Refresh(); }