Pour lier les événements « chargés » et « débarquées » J'utilise le code suivant dans ma page XAML:Comment réutiliser Interaction Comportement dans XAML pour l'application WinRT avec une architecture MVVM
<Page ...>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="Loaded">
<core:InvokeCommandAction Command="{Binding LoadedCommand}" />
</core:EventTriggerBehavior>
<core:EventTriggerBehavior EventName="Unloaded">
<core:InvokeCommandAction Command="{Binding UnloadedCommand}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
<Grid />
</Page>
Tout fonctionne comme prévu cependant je copie ce même morceau de code dans chaque vue? Comment puis-je rendre cela réutilisable?
EDIT
J'ai créé une propriété attachée à l'aide du code dans cette post.
Ma propriété Attached ressemble à ceci:
public static class UiBehaviors
{
public static readonly DependencyProperty AttachedTriggersProperty = DependencyProperty.RegisterAttached("AttachedTriggers", typeof(EventTriggerCollection), typeof(UiBehaviors), new PropertyMetadata(null, OnAttachedTriggersChanged));
private static void OnAttachedTriggersChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
BehaviorCollection triggers = Interaction.GetBehaviors(d);
if (e.OldValue != null)
{
foreach (EventTriggerBehavior trigger in (EventTriggerCollection)e.OldValue)
triggers.Remove(trigger);
}
if (e.NewValue == null)
return;
foreach (EventTriggerBehavior trigger in (EventTriggerCollection)e.NewValue)
triggers.Add(trigger);
}
public static void SetAttachedTriggers(DependencyObject element, EventTriggerCollection value)
{
element.SetValue(AttachedTriggersProperty, value);
}
public static EventTriggerCollection GetAttachedTriggers(DependencyObject element)
{
return (EventTriggerCollection)element.GetValue(AttachedTriggersProperty);
}
}
public class EventTriggerCollection : Collection<EventTriggerBehavior>
{
}
Mon Xaml ressemble à ceci:
<Style x:Name="Test" TargetType="UserControl">
<Setter Property="storeApplication:UiBehaviors.AttachedTriggers">
<Setter.Value>
<storeApplication:EventTriggerCollection>
<core:EventTriggerBehavior EventName="Loaded">
<core:InvokeCommandAction Command="{Binding LoadedCommand}" />
</core:EventTriggerBehavior>
<core:EventTriggerBehavior EventName="Unloaded">
<core:InvokeCommandAction Command="{Binding UnloadedCommand}" />
</core:EventTriggerBehavior>
</storeApplication:EventTriggerCollection>
</Setter.Value>
</Setter>
</Style>
Le x: shared = attribut Faux est requis sur le EventTriggerCollection pour créer un nouvel ensemble de déclencheurs chaque fois que la propriété est accessible. Sans cela, un déclencheur ne fonctionnera que pour le premier contrôle qui accède à la propriété.
Malheureusement, je ne peux pas utiliser cet attribut car il n'est pas pris en charge dans WinRT. Voir ceci post. Je suis maintenant bloqué :(Qu'est-ce que je manque
Merci pour la réponse. J'ai essayé de définir une propriété attachée sans beaucoup de chance. Voir mon post édité. Avez-vous un exemple de "Sub Classing" une page Xaml? –
@CoolBreeze Mis à jour ma réponse. –
Merci pour les deux exemples. Je ai préféré la solution de comportement ci-joint :) –