1

コントロールのコンテンツをフィルタリングする方法を定義する関数を期待する「Filter」プロパティを持つコントロールがあります。これまでのところ、コードビハインドでフィルターを次のように設定しています:

MyControl.Filter = AddressOf Filters.MyFilter

この例では、MyFilter は次のシグネチャを持つ Filters クラスの共有関数です。

Public Shared Function MyFilter(ByVal obj As Object, ByVal text As String) As Boolean

これをxamlに設定したいと思います。Filters.MyFilter を静的リソースとして設定し、そのように設定することを考えていました:

...Filter="{StaticResource myFilter}"/>

しかし、Filters.MyFilter を静的リソースとして設定することはできません。これを達成する方法についてのアイデアはありますか?

ありがとう、

4

1 に答える 1

0

これを直接行うことはできません。XAML は、イベント ハンドラーとして以外に、関数を参照する方法を提供しません。

述語型のプロパティを持つオブジェクトを作成することで、間接的に行うことができます。

public class FilterOMatic
{
  public Predicate<int> FilterProc
  {
    get { return n => (n % 2) == 0; }
  }
}

(C#主義を許してください-私は関数を返すためのVB構文にあまり精通していません。それは次のようになると思いますReturn AddressOf Filters.MyFilterが、間違っているかもしれません。)

これで、FilterOmatic をリソースとしてインスタンス化し、そのリソースへのバインディングを介してその FilterProc プロパティを参照できます。

<Window.Resources>
  <local:FilterOMatic x:Key="fom" />
</Window.Resources>

<MyObject Filter="{Binding FilterProc, Source={StaticResource fom}}" />
于 2010-03-19T20:27:22.793 に答える