コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }