public ItemListFilterViewModel( IItemFilter itemWhitelist, IItemFilter itemBlacklist, IItemService itemService) { itemWhitelist.FilterMode = FilterMode.Whitelist; ItemWhitelist = itemWhitelist; itemBlacklist.FilterMode = FilterMode.Blacklist; ItemBlacklist = itemBlacklist; this.FilterChanges = Observable.CombineLatest( itemWhitelist.FilterChanges, itemBlacklist.FilterChanges ) .Select(filters => new Func <ItemEx, bool>((ItemEx item) => filters.All(filter => filter(item)))); var tagPool = itemService.GetTags(FilterChanges).AsObservableList(); itemWhitelist.SetTagpool(tagPool); itemBlacklist.SetTagpool(tagPool); this.Tagpool = tagPool; }