Pobieranie listy po wpisaniu 3 znaków

0

Cześć, chciałbym pobrać listę rekordów po wpisaniu 3 znaków przy mniejszej ilości wyświetla mi się pełna lista.

<local:CustomSearch Text="{Binding SearchPhrase}" Grid.Row="1" Placeholder="Szukaj osób" Margin="16,0,16,0" />
                        <ScrollView Grid.Row="2">
                            <flv:FlowListView SeparatorVisibility="None" HasUnevenRows="true" FlowItemTappedCommand="{Binding FollowerItemCommand}" FlowColumnMinWidth="100" FlowItemsSource="{Binding FollowerItems}">
                                <flv:FlowListView.FlowColumnTemplate>
                                    <DataTemplate>
                                        <Grid Padding="5">
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="98" />
                                            </Grid.RowDefinitions>
                                            <Grid.ColumnDefinitions>
                                                <ColumnDefinition Width="98" />
                                            </Grid.ColumnDefinitions>
                                           <Image>
                                                <Image.Source>
                                                    <UriImageSource Uri="{Binding EmailHash}"/>
                                                </Image.Source>
                                            </Image>
                                        </Grid>
                                    </DataTemplate>
                                </flv:FlowListView.FlowColumnTemplate>
                            </flv:FlowListView>

ViewModel

private ObservableCollection<FollowersResponseModel> _followersList = null;
        public ObservableCollection<FollowersResponseModel> FollowersList
        {
            get => _followersList;
            set
            {
                _followersList = value;
                OnPropertyChanged();
            }
        }

        private SearchModel _searchItem = null;
        public SearchModel SearchItem
        {
            get => _searchItem;
            set
            {
                _searchItem = value;
                OnPropertyChanged();
                OnMyCarItemSelected();
            }
        }

   private string _searchPhrase = null;
        public string SearchPhrase
        {
            get => _searchPhrase;
            set
            {
                _searchPhrase = value;
                OnPropertyChanged();
                OnSearchPhrase();
            }

......

 private async void InitializeFollowersList()
        {
            UserDialogsExtension.Instance.ShowLoading(AppResource.PleaseWait, Acr.UserDialogs.MaskType.Black);

            var model = await ProfileManagerInstance.GetFollowersBlockedList();

            UserDialogsExtension.Instance.HideLoading();

            if (model == null) return;

            if (FollowerItems == null)
            {
                FollowerItems = new ObservableCollection<FollowerModel>();
            }
            else
            {
                FollowerItems.Clear();
            }

            FollowerItems.AddRange(model.Users);
        }

        private async void OnFollowerItemChanged()
        {
            if (_followerItem == null) return;

            await NavigateToPage(new UserProfilePage(_followerItem.Uin, _followerItem.Login));
        }

  private void OnSearchPhrase()
        {
            FollowerItems.Select(i => i.Login.Contains(SearchPhrase));
        }

....

Api

 public async Task<FollowersModel> GetFollowersBlockedList()
        {
            var version = await FileManagerInstance.ReadFile(FileManager.FileType.FollowersVersion);

            if (string.IsNullOrEmpty(version)) version = DEFAULT_VERSION;

            var response = await BasicRequestAsync(string.Format(FOLLOWERS_BLOCKED_URL, version), HttpMethod.Get, true);

            if (response == null || !response.IsSuccessStatusCode)
            {
                var followerModel = await LoadFollowersListFromStorage();

                return followerModel;
            }

            var stream = await response.Content.ReadAsStreamAsync();
            var content = Tools.ConvertStreamToString(stream);

            if (string.IsNullOrEmpty(content))
            {
                var followerModel = await LoadFollowersListFromStorage();

                return followerModel;
            }

            var responseModel = JsonConvert.DeserializeObject<ResponseModel>(content);

            var data = responseModel.Result.Response.Data;

            if (data == null)
            {
                _log.MessageInDebug("Response code status : " + responseModel.Result.Response.Message);

                var followerModel = await LoadFollowersListFromStorage();

                return followerModel;
            }
            else
            {
                var model = JsonConvert.DeserializeObject<FollowersResponseModel>(data.ToString());

                FileManagerInstance.WriteTextToFile(FileManager.FileType.FollowersList, data.ToString());

                var followerModel = new FollowersModel()
                {
                    Users = model.Users.Select(u => new FollowerModel
                    {
                        Uin = u.Uin,
                        Login = u.Login,
                        EmailHash = u.EmailHash,
                        UinFollows = u.UinFollows,
                        FollowOfUin = u.FollowOfUin,
                        Blocked = u.Blocked
                    }).ToList(),
                    Version = model.Version
                };

                return followerModel;
            }
        }
0

Nie chce mi się myśleć, ale jakaś wariacja tego rozwiązania powinna działać.

        private string lastFilter;
        public ObservableCollection<FollowersResponseModel> FollowersList
        {
            get {
                     _followersList = lastFilter == <akutalnyFitr>?_followersList : new <odpowiedniTypKolecji>(/*inicjalizuj*/  Search(<akutalnyFitr>) );
                     lastFilter =  <akutalnyFitr>;
                     return _followersList;
                  }
            set
            {
                _followersList = value;
                OnPropertyChanged();
            }
        }

1 użytkowników online, w tym zalogowanych: 0, gości: 1