我有一个具有“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设置为静态资源。关于如何实现这一点的任何想法?
谢谢,
答案 0 :(得分: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}}" />