2010-03-19 67 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}}" /> 
相關問題