3

私はListBoxいくつかの、、Itemsおよびを持っていTextBoxます。inのテキストは、inのTextBox開始文字と一致し、フィルタリングされた結果を表示する必要があります。これを行う方法?ありがとう。ItemsListBox

4

3 に答える 3

2

Joshのこの例が大好きです...

http://joshsmithonwpf.wordpress.com/2007/06/12/searching-for-items-in-a-listbox/#

これは他のリンクと同様のアプローチですが、これは非常に優れています。WPFを使用する場合は、せん断の優雅さを覚えておくとよいでしょう(そして、非常に簡単な方法で物事を成し遂げる方法)。

于 2013-03-26T02:32:11.530 に答える
1

それはあなたの実装に依存します。MVVMパターンに従っていますか?

はいの場合、テキストボックスの設定イベントでリストボックスをフィルタリングできます。セッターでは、リストボックスの内容を変更できます。

<TextBox Text="{Binding SearchText}" />
private string _searchText;
public string SearchText
{
    get { return _searchText; }
    set
    {
        _searchText = value;
        // Change contents of list box.
    }
}

また、MVVMをフォローしていない場合は、テキストボックスに変更イベントハンドラーを追加する必要があります。TextBoxを選択し、プロパティウィンドウでそのイベントを確認します。その中にTextChangedイベントがあります。そのイベントを追加します。これにより、テキストボックスのテキストが変更されるたびに関数が提供されます。そして、その関数では、リストボックスをフィルタリングするためのロジックを実装できます。

于 2013-03-26T06:01:16.383 に答える
1

みんなにthxが、私は何かをもっと簡単にしました..それが役立つことを願っています..

リストを宣言する:

       List<string> list = new List<string>();

メインウィンドウ:

      public MainWindow() {
        list.Clear();

        foreach (String str in lb1.Items)
        {
            list.Add(str);
        }
     }

textchangedイベントの場合:

      public void t1_TextChanged(object sender, TextChangedEventArgs e)
{
        if (String.IsNullOrEmpty(t1.Text.Trim()) == false)
        {
            lb1.Items.Clear();
            foreach (string str in list)
            {
                if (str.StartsWith(t1.Text.Trim()))

                {
                    lb1.Items.Add(str);
                }
            } 
        }

        else if(t1.Text.Trim() == "")
        {
            lb1.Items.Clear();

            foreach (string str in list)
                {
                    lb1.Items.Add(str);
                }
            }                         
        }                
于 2013-03-27T04:16:18.587 に答える