方法 : ビュー内のデータをフィルタ処理する
更新 : 2007 年 11 月
この例では、ビュー内のデータをフィルタ処理する方法を示します。
使用例
フィルタを作成するには、フィルタ処理ロジックを提供するメソッドを定義します。このメソッドは、コールバックとして使用され、object 型のパラメータを受け取ります。次のメソッドは、残りのオブジェクトをフィルタで除外し、filled プロパティが "No" に設定されたすべての Order オブジェクトを返します。
Public Function Contains(ByVal de As Object) As Boolean
Dim order1 As Order = TryCast(de, Order)
Return (order1.Filled Is "No")
End Function
public bool Contains(object de)
{
Order order = de as Order;
//Return members whose Orders have not been filled
return(order.Filled== "No");
}
次の例に示すように、フィルタを適用できます。この例では、myCollectionView は、ListCollectionView オブジェクトです。
myCollectionView.Filter = new Predicate<object>(Contains);
フィルタを解除するには、Filter プロパティを null に設定できます。
myCollectionView.Filter = null;
ビューを作成または取得する方法については、「方法 : データ コレクションの既定のビューを取得する」を参照してください。コード例全体については、「ビューでの項目の並べ替えおよびフィルタ処理のサンプル」を参照してください。
ビュー オブジェクトが CollectionViewSource オブジェクトから生成された場合は、Filter イベントのイベント ハンドラを設定することによりフィルタ処理ロジックを適用します。次の例では、listingDataView は CollectionViewSource のインスタンスです。
listingDataView.Filter += new FilterEventHandler(ShowOnlyBargainsFilter);
ShowOnlyBargainsFilter フィルタ イベント ハンドラの実装例を次に示します。このイベント ハンドラは、Accepted プロパティを使用して、CurrentPrice が 25 ドル以上の AuctionItem オブジェクトをフィルタで除外します。
private void ShowOnlyBargainsFilter(object sender, FilterEventArgs e)
{
AuctionItem product = e.Item as AuctionItem;
if (product != null)
{
// Filter out products with price 25 or above
if (product.CurrentPrice < 25)
{
e.Accepted = true;
}
else
{
e.Accepted = false;
}
}
}
コード例全体については、「データ バインディングのデモ」を参照してください。