2010-10-19 21 views
0

Existe-t-il un moyen d'appeler des méthodes d'objets externes (par exemple des objets ressources) directement à partir de xaml?Existe-t-il un moyen d'appeler des fonctions externes à partir de xaml?

je veux dire quelque chose comme ceci:

<Grid xmlns:dm="clr-namespace:MyNameSpace;assembly=MyAssembly"> 
    <Grid.Resources> 
     <dm:TimeSource x:Key="timesource1"/> 
    </Grid.Resources> 

    <Button Click="timesource_updade">Update time</Button> 
</Grid> 

La méthode timesource_update est bien sûr la méthode de l'objet TIMESOURCE.

J'ai besoin d'utiliser du XAML pur, pas de code derrière.

Répondre

1

OK, voici la dernière solution.

XAML:

<Grid xmlns:dm="clr-namespace:MyNameSpace;assembly=MyAssembly"> 
     <Grid.Resources> 
      <dm:TimeSource x:Key="timesource1"/> 
     </Grid.Resources> 

     <Button Command="{x:Static dm:TimeSource.Update}" 
       CommandParameter="any_parameter" 
       CommandTarget="{Binding Source={StaticResource timesource1}}">Update time</Button> 
    </Grid> 

CODE dans la classe TIMESOURCE:

public class TimeSource : System.Windows.UIElement { 

    public static RoutedCommand Update = new RoutedCommand(); 

    private void UpdateExecuted(object sender, ExecutedRoutedEventArgs e) 
    { 
     // code 
    } 

    private void UpdateCanExecute(object sender, CanExecuteRoutedEventArgs e) 
    { 
     e.CanExecute = true; 
    } 

    // Constructor 
    public TimeSource() { 

    CommandBinding cb = new CommandBinding(TimeSource.Update, UpdateExecuted, UpdateCanExecute); 
    CommandBindings.Add(cb2); 
    } 
} 

TIMESOURCE doit être dérivé de UIElement afin d'avoir CommandBindings. Mais le résultat appelle la méthode d'assemblage externe directement à partir de XAML. En cliquant sur le bouton, la méthode 'UpdateExecuted' de l'objet timesource1 est appelée et c'est exactement ce que je cherchais.

1

Vérifiez this thread, il a un problème similaire. En général, vous ne pouvez pas appeler une méthode directement depuis xaml. Vous pouvez utiliser des commandes ou vous pouvez créer un objet à partir de xaml qui créera une méthode sur un thread, qui se disposera quand il le faudra.

Mais je crains que vous ne pouvez pas le faire uniquement en pur XAML. En C#, vous pouvez faire tout ce que vous pouvez faire en XAML, mais pas autrement. Vous pouvez seulement faire certaines choses de XAML que vous pouvez faire en C#.

+0

Cela m'a définitivement indiqué la bonne direction. Merci pour votre aide et consultez ma dernière solution ci-dessous. – Gal