2010-03-19 3 views
1

J'ai un contrôle qui a une propriété "Filtre" qui attend une fonction qui définit comment le contenu du contrôle doit être filtré. Jusqu'à présent, je suis en train de filtre dans le code derrière en tant que tel:Comment définir une propriété d'un contrôle à une adresse d'une fonction dans xaml?

MyControl.Filter = AddressOf Filters.MyFilter

Dans cet exemple MyFilter est une fonction partagée dans la classe des filtres avec la signature suivante:

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

Je tiens à mettre ceci en xaml. Je pensais à la mise en Filters.MyFilter comme une ressource statique et la mise de cette façon:

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

mais je ne peux pas mis Filters.MyFilter comme une ressource statique. Des idées sur la façon d'y parvenir?

Merci,

Répondre

0

Vous ne pouvez pas faire cela directement. XAML ne permet pas de faire référence à des fonctions autres que des gestionnaires d'événements.

Vous pouvez le faire indirectement, en créant un objet qui a une propriété de type sous-jacente:

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

(Pardon C# isme - Je ne suis pas trop familier avec la syntaxe VB pour les fonctions retour . Je pense ce serait quelque chose comme Return AddressOf Filters.MyFilter mais je peux me tromper)

maintenant, vous pouvez instancier le FilterOMatic comme ressource et référence sa propriété FilterProc via une liaison vers cette ressource.

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

<MyObject Filter="{Binding FilterProc, Source={StaticResource fom}}" /> 
Questions connexes