1

WP7 Silverlight Toolkit の AutoCompleteBox を使用しています。文字列の静的リスト (変化しないリスト) を AutoCompleteBox にバインドする例を見てきました。ただし、AutoCompleteBox をより動的な方法でバインドする方法を示す例はありますか? 以下の私の試みは InvalidOperationException をスローし続けます: CollectionChanged または PropertyChanged イベント中に ObservableCollection を変更することはできません。

これは私のxamlにあるものです。

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

私のコード ビハインドでは、次のようにデータベースまたは Web にアクセスすることをシミュレートしました。

    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 が動的に使用されないためですか?

4

2 に答える 2

1

その場でリストを変更するポイントは何ですか? オートコンプリート ボックスは、指定された項目ソースからリストを自動的にフィルター処理します。

とにかく、AutoCompleteBox がアイテムを除外しようとした後、TextChanged が最初に呼び出されます。いくつかの文字を入力した後に戻るボタンを押すと、生成されたアイテムが提案されます。

AutoCompleteBox を機能に合わせて再プログラムする可能性が最も高いですが (これはオープン ソースです)、目的を説明した方がよいと思いますので、より適切なアドバイスを行うことができます。

于 2011-07-28T17:27:43.700 に答える
0

実際に AutoCompleteBox を再プログラムする必要はありません。Populating イベントを処理して、AutoCompleteBox を動的に生成されたデータにリンクできます。

これはあなたが探しているものです。良い例の良い記事です。そして、言及したように、手動の作成操作が完了したら、PopulateComplete() を呼び出すことを忘れないでください。

独自の検索ロジックを定義するために、ItemFilter プロパティをカスタム フィルターに設定することもできます。詳しくはこちらをご覧ください。FilterMode を Custom に設定することを忘れないでください。

于 2016-01-08T17:36:21.577 に答える