Как привязать AutoCompleteBox к нестатическому списку в Windows Phone - PullRequest
1 голос
/ 28 июля 2011

Я работаю с AutoCompleteBox из WP7 Silverlight Toolkit.Я видел примеры, где они связывают статический список (неизменяемый список) строк с AutoCompleteBox.Тем не менее, есть ли пример, показывающий, как связывать AutoCompleteBox более динамичным способом?моя попытка ниже продолжает выдавать InvalidOperationException: не удается изменить ObservableCollection во время события CollectionChanged или PropertyChanged.

это то, что у меня есть в моем xaml.

<toolkit:AutoCompleteBox x:Name="tbQuery" TextChanged="tbQuery_TextChanged" />

в моем коде позади, у меня естьИмитировал переход к базе данных или через Интернет следующим образом.

    private void tbQuery_TextChanged(object sender, RoutedEventArgs e)
    {
        AutoCompleteBox acBox = sender as AutoCompleteBox;
        string txt = acBox.Text;
        if (txt.Length > 0)
        {
            //exception thrown below here;
            //_words is of type ObservableCollection<string>
            //earlier, acBox.ItemsSource was set to _words
            _words.Clear();
            _words.Add(txt + "a");
            _words.Add(txt + "b");
            _words.Add(txt + "c");
        }
    }

Я также попробовал что-то вроде того, что ниже, но это не сработало.выдается то же самое исключение InvalidOperationException.

    private void tbQuery_TextChanged(object sender, RoutedEventArgs e)
    {
        AutoCompleteBox acBox = sender as AutoCompleteBox;
        string txt = acBox.Text;
        if (txt.Length > 0)
        {
            List<string> list = new List<string>();
            list.Add(txt + "a");
            list.Add(txt + "b");
            list.Add(txt + "c");
            //exception thrown below here;
            acBox.ItemsSource = list;
        }
    }

демонстрация в наборе инструментов показывает только использование статического ресурса, а большинство примеров показывают только со статическим списком.это потому, что AutoCompleteBox не должен использоваться динамически?

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Точно, какой смысл менять список на лету? Окно автозаполнения автоматически фильтрует ваш список из заданного источника.

В любом случае, TextChanged сначала называется , после AutoCompleteBox попытался отфильтровать ваши элементы. Если вы нажмете кнопку «Назад» после ввода нескольких символов, вы увидите предложенные сгенерированные элементы.

Скорее всего, вы можете перепрограммировать AutoCompleteBox под ваши функциональные возможности (это с открытым исходным кодом), но я думаю, что было бы лучше, если бы вы объяснили вашу цель, поэтому мы можем лучше посоветовать.

0 голосов
/ 08 января 2016

Ну, на самом деле вам не нужно перепрограммировать AutoCompleteBox. Вы можете обработать событие Заполнение, чтобы связать AutoCompleteBox с динамически генерируемыми данными.

Это - это то, что вы ищете. Это хорошая статья с хорошим примером. И в качестве упоминания не забудьте вызвать PopulateComplete (), когда операция заполнения заполнена вручную.

Вы также можете установить свойство ItemFilter в пользовательский фильтр для определения собственной логики поиска. Смотрите это для деталей. Не забудьте установить для FilterMode значение Custom.

...