как установить свойство элемента управления для адреса функции в xaml? - PullRequest
1 голос
/ 19 марта 2010

У меня есть элемент управления со свойством «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 в качестве статического ресурса.Есть идеи как этого добиться?

Спасибо,

1 Ответ

0 голосов
/ 19 марта 2010

Вы не можете сделать это напрямую. 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}}" />
...