internal SourceItemCollections( IViewModel selectionVM, Func <TItemSource, bool> isActiveFilter ) { IEnumerable <TItemSource> allItems = SelectionHelpers .GetAllSourceItems <TItemSource>(selectionVM); IEnumerable <TItemSource> selectedItems = SelectionHelpers .GetSelectedSourceItems <TItemSource>(selectionVM); AllSourceItems = new HashSet <TItemSource>(allItems); IEnumerable <TItemSource> selectableItems = allItems; if (isActiveFilter != null) { selectableItems = selectableItems.Where(isActiveFilter); } if (selectedItems != null && selectedItems.Any()) { // Add items that are either inactive but currently selected or do // are not contained in the all items at all. selectableItems = selectableItems.Union(selectedItems); } SelectableItems = selectableItems.ToList(); }
public SelectableItemsCollection <TItemSource> GetSelectableItems(IBehaviorContext context) { SelectableItemsCollection <TItemSource> items; if (!context.FieldValues.TryGetValue(_items, out items)) { var source = ((IHasSourceObject <TSourceObject>)context.VM).Source; Func <TItemSource, bool> reducedFilter = null; if (IsActiveFilter != null) { reducedFilter = item => IsActiveFilter(source, item); } items = new SelectableItemsCollection <TItemSource>( SelectionHelpers.GetAllSourceItems <TItemSource>(context.VM), SelectionHelpers.GetSelectedSourceItems <TItemSource>(context.VM), reducedFilter ); context.FieldValues.SetValue(_items, items); } return(items); }
private void DiscardUnusedEntries(IBehaviorContext context) { var activeSourceItems = new HashSet <TItemSource>( SelectionHelpers.GetAllSourceItems <TItemSource>(context.VM) ); Dictionary <TItemSource, TItemVM> cache = GetCache(context); foreach (TItemSource entrySource in cache.Keys.ToArray()) { if (!activeSourceItems.Contains(entrySource)) { cache.Remove(entrySource); } } }