Wie wollen Sie eine Eigenschaft eines Steuerelements auf eine Adresse einer Funktion in XAML festlegen?

StackOverflow https://stackoverflow.com/questions/2480293

Frage

Ich habe eine Steuerung, die eine „Filter“ Eigenschaft hat, die eine Funktion erwartet die definiert, wie der Inhalt der Steuerung gefiltert werden soll. so weit ich hinter als solche die Filter in Code bin Einstellung:

MyControl.Filter = AddressOf Filters.MyFilter

In diesem Beispiel MyFilter ist eine gemeinsame Funktion in den Filter-Klasse mit der folgenden Signatur:

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

würde Ich mag diese in XAML festlegen. Ich dachte an die Filters.MyFilter als statische Ressource einstellen und es auf diese Weise einstellen:

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

, aber ich Filters.MyFilter als statische Ressource gesetzt kippe. Alle Ideen, wie dies zu erreichen?

Danke,

War es hilfreich?

Lösung

Sie können dies direkt nicht. XAML bietet keine Möglichkeit, auf Funktionen zu beziehen, die nicht als Event-Handler.

Sie können es indirekt, indem er ein Objekt zu schaffen, das eine Eigenschaft von Prädikat Typ hat:

public class FilterOMatic
{
  public Predicate<int> FilterProc
  {
    get { return n => (n % 2) == 0; }
  }
}

(Pardon der C # Ismus -.. Ich bin nicht allzu vertraut mit der VB-Syntax für Funktionen Rückkehr I denkt es so etwas wie Return AddressOf Filters.MyFilter sein würde, aber ich kann falsch sein)

Jetzt können Sie die FilterOMatic als Ressource instanziiert und seine FilterProc Eigenschaft verweisen auf diese Ressource über eine Bindung:

<Window.Resources>
  <local:FilterOMatic x:Key="fom" />
</Window.Resources>

<MyObject Filter="{Binding FilterProc, Source={StaticResource fom}}" />
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top