このサンプルには数千曲が含まれています。曲はアーティストとアルバムによって分類されていますが、スクロールして特定の曲を探すことは実用的ではありません。
このサンプルでは、検索機能を実装することにより、これに対処します。検索ボックスに文字列を入力すると、コンテンツが自動的にフィルタされて、指定した文字列を含むタイトルの曲、アーティスト、またはアルバムのみが表示されます。ここでは、SearchBox コントロールの外観と動作について簡単に説明します。
このコントロールには、次の 2 つのプロパティがあります。
ユーザーが SearchBox コントロールに入力すると、タイマーが動き始めます。入力が短時間(800 ミリ秒)中断すると、フィルタがデータソースに適用されます。すべての文字について入力の直後にフィルタ処理すると、効率が悪く、ユーザーにとっては煩わしいので、行われません。
この処理に使用されるタイマーのクラスは、C1FlexGrid アセンブリで定義されます。
フィルタを適用するために、SearchBox コントロールは View.Filter プロパティに対して、各データ項目をチェックするメソッドを設定し、FilterProperties メンバによって指定されたプロパティの少なくとも 1 つに、ユーザーが入力した検索文字列が含まれている項目のみを保持します。
コードは、次のようになります。
このコードで注目する部分は、フィルタを適用するブロックです。そこでは、通常のメソッドの代わりにラムダ関数を使用していますが、効果は同じです。ラムダ関数は、リフレクションを使用することにより、指定された各プロパティの値を取得し、検索文字列を含むかどうかをチェックします。一致が見つかると、その項目が表示されます。見つからなければ、フィルタで除外されます。
SearchBox コントロールをアプリケーションに接続するには、View プロパティと FilterProperties プロパティを設定する必要があります。このサンプルでは、View プロパティを曲のデータソースに設定し、Artist、Album、Name の各プロパティを FilterProperties コレクションに追加して、ユーザーがこれらの要素を検索できるようにします。SearchBox をアプリケーションに接続するコードは次のとおりです。