public async ValueTask LoadTags() { try { if (Interlocked.Increment(ref _loading) != 1) { return; } if (_loaded) { return; } var tags = await Model.ListTags(_query.QueryString, _query.TypeId, _query.Offset, _query.Limit); if (tags != null && tags.Count > 0) { _query.Offset += _query.Limit; foreach (var tag in tags.Where(it => SelectedTags.All(tag => tag.ObjectId != it.ObjectId))) { var displayTag = new DisplayTag(tag); displayTag.ClickCommand = new AsyncCommand(async() => { if (SelectedTags.All(it => it.ObjectId != displayTag.ObjectId)) { displayTag.ClickCommand = new AsyncCommand(async() => { SelectedTags.Remove(displayTag); }); SelectedTags.Add(displayTag); } }); SearchResult.Add(displayTag); } } else { _loaded = true; } } finally { Interlocked.Decrement(ref _loading); } }
public TagSelectionViewModel(long typeId, List <Tag> selectedTags) { _query = new TagQueryHelper() { Limit = 100, Offset = 0, QueryString = null, TypeId = typeId }; SelectedTags = new ObservableCollection <DisplayTag>(); if (selectedTags == null) { return; } foreach (var selectedTag in selectedTags) { var displayTag = new DisplayTag(selectedTag); displayTag.ClickCommand = new AsyncCommand(async() => { SelectedTags.Remove(displayTag); }); SelectedTags.Add(displayTag); } }