private async Task AddUserItems(string key) { Debug.WriteLine("current screen name: " + key); if (String.IsNullOrEmpty(key)) { await DispatcherHelper.UIDispatcher.InvokeAsync(() => this._items.Clear()); return; } string[] items; if (Setting.InputUserSuggestMode.Value == InputUserSuggestMode.All) { items = (await UserProxy.GetUsersFastAsync(key, 1000)) .Select(t => t.Item2) .ToArray(); } else { items = (await UserProxy.GetRelatedUsersFastAsync(key, Setting.InputUserSuggestMode.Value == InputUserSuggestMode.FollowingsOnly, 1000)) .Select(t => t.Item2) .ToArray(); } // re-ordering var ordered = items.Where(s => s.StartsWith(key)) .OrderBy(s => s) .Concat(items.Where(s => !s.StartsWith(key)) .OrderBy(s => s)) .Select(s => new SuggestItemViewModel("@" + s)) .ToArray(); await DispatcherHelper.UIDispatcher.InvokeAsync( () => { this._items.Clear(); ordered.ForEach(s => this._items.Add(s)); this.SelectSuitableItem("@" + key); }); }