1

我有一个具有“过滤器”属性的控件,该属性需要一个定义如何过滤控件内容的函数。到目前为止,我在后面的代码中设置了过滤器:

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#-ism——我对返回函数的 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 回答