2010-03-19 32 views
1

我有一个具有“Filter”属性的控件,该属性需要定义如何过滤控件内容的函数。到目前为止我正在后面设定在代码中过滤这样:如何将控件的属性设置为xaml中函数的地址?

MyControl.Filter = AddressOf Filters.MyFilter

在这个例子中MyFilter在过滤器类的共享函数具有以下签名:

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

我喜欢在xaml中设置。我想设置Filters.MyFilter作为一个静态资源,并将其设置这样的:

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

,但我不能设置Filters.MyFilter为静态资源。任何想法如何实现这一目标?

谢谢,

回答

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}}" /> 
相关问题