Comment implémenter une commande Silverlight 4 à exécuter lorsque le contrôle utilisateur se charge au lieu d'être mappé à un clic de bouton explicite?Exécuter la commande Silverlight 4 sur le chargement
3
A
Répondre
1
Créer un DependencyProperty
de type ICommand
: -
#region public ICommand LoadedCommand
public ICommand LoadedCommand
{
get { return GetValue(LoadedCommandProperty) as ICommand; }
set { SetValue(LoadedCommandProperty, value); }
}
public static readonly DependencyProperty LoadedCommandProperty =
DependencyProperty.Register(
"LoadedCommand",
typeof(ICommand),
typeof(MainPage),
new PropertyMetadata(null));
#endregion public ICommand LoadedCommand
Ajoutez également un quelque chose à agir en tant que paramètre de commande: -
#region public object LoadedCommandParameter
public object LoadedCommandParameter
{
get { return GetValue(LoadedCommandParameterProperty) as object; }
set { SetValue(LoadedCommandParameterProperty, value); }
}
public static readonly DependencyProperty LoadedCommandParameterProperty =
DependencyProperty.Register(
"LoadedCommandParameter",
typeof(object),
typeof(MainPage),
new PropertyMetadata(null));
#endregion public object LoadedCommandParameter
maintenant mis en place son exécution comme celui-ci: -
public UserControl1()
{
InitializeComponent();
Loaded += UserControl1_Loaded;
}
void UserControl1_Loaded(object sender, RoutedEventArgs e)
{
if (LoadedCommand != null && LoadedCommand.CanExecute(LoadedCommandParameter))
{
LoadedCommand.Execute(LoadedCommandParameter);
}
}
Maintenant, si votre ViewModel (a une commande appelée StartStuff
) puis: -
<UserControl1 LoadedCommand="{Binding StartStuff}" .... >
4
Ou simplement ajouter un trigger en XAML pour votre UserControl:
<i:Interaction.Triggers>
<i:EventTrigger EventName="Loaded">
<si:InvokeDataCommand Command="{Binding MyCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
1
Voilà une charge de code. La version concise sans le code derrière
public class LoadedBehaviour
{
public static ICommand GetLoadedCommand(DependencyObject dependencyObject)
{
return (ICommand)dependencyObject.GetValue(LoadedCommandProperty);
}
public static void SetLoadedCommand(DependencyObject dependencyObject, ICommand value)
{
dependencyObject.SetValue(LoadedCommandProperty, value);
}
public static Action GetLoadedCommandExecutor(DependencyObject dependencyObject)
{
return (Action)dependencyObject.GetValue(LoadedCommandExecutorProperty);
}
public static void SetLoadedCommandExecutor(DependencyObject dependencyObject, Action value)
{
dependencyObject.SetValue(LoadedCommandExecutorProperty, value);
}
public static readonly DependencyProperty LoadedCommandProperty = DependencyProperty.Register("LoadedCommand", typeof(ICommand), typeof(FrameworkElement), new PropertyMetadata(OnPropertyChanged));
public static readonly DependencyProperty LoadedCommandExecutorProperty = DependencyProperty.Register("LoadedCommandExecutor", typeof(Action), typeof(FrameworkElement), new PropertyMetadata(OnPropertyChanged));
private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (!(d is FrameworkElement))
{
throw new ArgumentException("Loaded command can only be used on FrameworkElements");
var executor = GetLoadedCommandExecutor(d);
if(executor == null)
{
executor =() =>
{
var command = GetLoadedCommand(d);
command.Execute(e);
};
SetLoadedCommandExecutor(d, executor);
((FrameworkElement)d).Loaded += (obj, args) => executor();
}
}
}
Questions connexes
- 1. Référence Silverlight 4 commande de Silverlight 3
- 2. silverlight 4, chargement dynamique de modules xap
- 3. Chargement de l'objet COM dans Silverlight 4
- 4. Silverlight 4 autorisation de la webcam sur le chargement du contrôle utilisateur
- 5. Silverlight 4 - Conserver les paramètres utilisateur sur le stockage isolé
- 6. Ironpython 2.6.1 sur Silverlight 4
- 7. Modèle Silverlight 4 sur DataGridHeader
- 8. Comment dire FORFILES pour exécuter la commande sur le chemin?
- 9. Modifier le titre dans Silverlight 4
- 10. Silverlight 4 Problème asynchrone
- 11. asp.net javascript chargement commande
- 12. JQuery comment exécuter après le chargement de la page
- 13. Sélection ContentTemplate basée sur le DataContext dans Silverlight 4
- 14. Encodage audio (vers AAC) dans Silverlight 4 (sur le client)?
- 15. Environnement.SpecialFolders dans Silverlight 4 sur Mac
- 16. Option d'édition manquante sur Silverlight 4 DataForm
- 17. Silverlight 4 Erreur de navigateur
- 18. WCF RIA, Silverlight 4
- 19. Comment exécuter une commande sur le serveur avec Capistrano?
- 20. exécuter la commande/application externe de java
- 21. Silverlight 4 & SQLite
- 22. Silverlight 4 Compression audio
- 23. Silverlight 4 Premier ColorAnimation
- 24. Silverlight 4 capture d'écran OOB
- 25. Silverlight 4: Charger le contrôle de fichier?
- 26. Silverlight 4 Diffusion multicast
- 27. WebHttpBinding dans Silverlight 4
- 28. Prises avec Silverlight 4
- 29. Silverlight 4 Multithread
- 30. comment exécuter la commande 'color' dans le script NAnt
Cela fonctionne bien, mais ce n'est pas aussi simple que cela, vous devez ajouter les références appropriées qui à leur tour augmente la taille de téléchargement de l'application. S'il y a plusieurs autres utilisations pour ces références, mais si ce n'est pas le cas, une solution codée évite le besoin de références supplémentaires pour cette exigence. – AnthonyWJones
True, vous devrez référencer System.Windows.Interactivity (45K) et Expression.Samples.Interactivity (53K) pour que cela fonctionne. –