バージョン

カスタム フィルターの作成

このコントロールは廃止されたため、XamDataGrid コントロールに移行することをお勧めします。今後、新機能、バグ修正、サポートは提供されません。コードベースの XamDataGrid への移行に関する質問は、サポートまでお問い合わせください。

始める前に

フィルター機能には、より大きい、等しいなどのフィルターのデフォルト セットが含まれています。ただし、状況によっては、このデフォルト セットを拡張したり、固有のカスタム フィルターを追加したい場合があります。このトピックは、その方法を示します。

この詳細なガイドは、ドロップダウン メニューでカスタム フィルターの隣りにアイコンを表示する方法も示します。

このトピックは、フィルタリングを有効にした状態でデータにバインドされた xamGrid コントロールがすでにあることが前提となっています。詳細は、 データ バインディングおよび フィルタリングのトピックを参照してください。

達成すること

ID が 5 より大きいすべての製品を表示するカスタム フィルターを作成します。

次の手順を実行します

  1. FilterOperand からプロパティを継承する独自のカスタム クラスを作成し、それに GreaterThan5 という名前を付けます。DefaultDisplayName メソッドは、カスタム フィルターのドロップダウン メニューに表示される文字列を取得します。RequiresFilteringInput メソッドは、フィルターがそれに適用される入力を必要とするか、スタンドアローンであるかを判断します。

Visual Basic の場合:

Public Class GreaterThan5
   Inherits FilterOperand
   Protected Overrides ReadOnly Property DefaultDisplayName As String
      Get
         Return "Greater Than 5"
      End Get
   End Property
   Public Overrides ReadOnly Property RequiresFilteringInput As Boolean
      Get
         Return false
      End Get
   End Property
   ' ID が 5 より大きいすべての製品を返すフィルター表現を作成します。
   Public Overrides Function FilteringExpression(ByVal value As Object) As System.Linq.Expressions.Expression
      Dim expr As System.Linq.Expressions.Expression
      ((Not (product) Is Nothing) _
      AndAlso (product.ProductID > 5))
      Return expr
   End Function
End Class

C# の場合:

public class GreaterThan5 : FilterOperand
{
   protected override string DefaultDisplayName
   {
      get
      {
         return "Greater Than 5";
      }
   }
   public override bool RequiresFilteringInput
   {
      get
      {
         return false;
      }
   }
   // ID が 5 より大きいすべての製品を返すフィルター表現を作成します。
   public override System.Linq.Expressions.Expression FilteringExpression(object value)
   {
      System.Linq.Expressions.Expression<Func<Product, bool>> expr = product => product != null && product.ProductID > 5;
      return expr;
   }
}
  1. データ テンプレートをリソース タグに追加します。このデータ テンプレートは、カスタム フィルターの隣りのドロップダウン メニューに表示されます。

注: このテンプレートのストリング値は、 Icon プロパティに設定されることになるため、2 文字以上の長さにすることはできません。

XAML の場合:

<UserControl.Resources>
   <DataTemplate x:Key="GreaterThanFiveIcon">
      <StackPanel>
         <TextBlock Text="&gt;5" FontWeight="Bold"></TextBlock>
      </StackPanel>
   </DataTemplate>
</UserControl.Resources>
  1. コード ビハインドでメンバー変数を作成します。

Visual Basic の場合:

Dim _greaterThanFiveIcon As DataTemplate = Nothing

C# の場合:

// メンバー変数
private DataTemplate _greaterThanFiveIcon = null;
  1. Loaded イベントで、データ テンプレートをメンバー変数に割り当て、新しいフィルター オペランド、GreaterThan5 を ProductID 列の RowFilterOperands コレクションに追加します。また Icon プロパティを新しいデータ テンプレートに設定します。

Visual Basic の場合:

' XAML で作成したデータ テンプレートを指定します。
_greaterThanFiveIcon = CType(Me.Resources("GreaterThanFiveIcon"),DataTemplate)
Dim fcs As FilterColumnSettings = Me.MyDataGrid.Columns.DataColumns("ProductID").FilterColumnSettings
fcs.RowFilterOperands.Add(New GreaterThan5())

C# の場合:

// XAML で作成したデータ テンプレートを指定します。
_greaterThanFiveIcon = this.Resources["GreaterThanFiveIcon"] as DataTemplate;
FilterColumnSettings fcs = this.MyDataGrid.Columns.DataColumns["ProductID"].FilterColumnSettings;
fcs.RowFilterOperands.Add(new GreaterThan5(){Icon = this._greaterThanFiveIcon});
  1. アプリケーションを保存して実行します。ProductID 列のドロップダウン オプションにオペランドおよびアイコンが表示されます。

xamGrid Custom Filter 01.png