私はWP7 Silverlight ToolkitのAutoCompleteBoxを使用しています。私はオートコンプリートボックスに文字列の静的リスト(変化しないリスト)をバインドする例を見てきました。ただし、オートコンプリートボックスをより動的にバインドする方法を示す例はありますか?以下の私の試みは、InvalidOperationExceptionをスローし続けます:CollectionChangedまたはPropertyChangedイベント中にObservableCollectionを変更できません。AutoCompleteBoxをWindows Phoneの非静的リストにバインドする方法
これは私の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が動的に使用されないためですか?
10,000文字列のリストがある場合は、実際に10,000文字列をロードしてAutoCompleteBoxにバインドすると言っていますか? 10,000文字列をロードするのにどれくらい時間がかかりますか?どのくらいのメモリがかかるでしょうか?ユーザーが入力したものを検出し、バックグラウンドのフィルタリングプロセスを実行し、UIに新しい(そしてより短い)リストをフィードする方が効率的ではないでしょうか?私はこのAutoCompleteBoxがあなたのAJAX自動完成ウィジェットのような動的ではないことを理解していると思います。もしそうでなければ、私はそれを使用しません。なぜなら、それは動作しませんが、簡単なケースではスケールされないからです。 – jake
100 * 100 = 10000です。エミュレータと実際のデバイスの両方で即座に実行できます。 (実際には、実際のデバイスではより高速です。)そして、私はすでに**動的にバインドする能力を持っていないことを指摘しました。(なぜ私はそれを再プログラムするように言ったのですか?)しかし、一度にすべてのデータを取得しないという考えは愚かです。電話では、一度にすべてを取得することは、ほとんど常にパフォーマンスが向上します。 32 GBのメモリでは、半分のメガバイトの文字列を心配する必要はありません。 –
私はそれを試してみましょう。ありがとう。 – jake