Comment puis-je Avoir un WPF EventTrigger sur une Vue de déclenchement lorsque le sous-jacent Viewmodel préceptes il se doit?
Voici le scénario:
J'ai suivantes de contrôle de l'utilisateur, l'idée est qu'il est le modèle de vue devrait être en mesure de signaler à la vue qu'il doit "Activer l'Éclat", jouant ainsi le Storyboard.
<UserControl x:Class="View.UnitView" ... >
...
<Storyboard x:Key="ActivateGlow">
...
</Storyboard>
...
<!-- INVALID BINDING! Not Dependancy Object-->
<EventTrigger RoutedEvent="{Binding OnActivateGlow}">
<BeginStoryboard Storyboard="{StaticResource ActivateGlow}"/>
</EventTrigger>
</UserControl>
dans le code-behind pour UnitView, j'ai:
public event EventHandler ActivateGlow;
et comme c'est assez normal dans MVVM, j'ai le texte suivant DataTemplate pour UnitViewModel:
<DataTemplate DataType="{x:Type vm:UnitViewModel}">
<vw:UnitView d:DesignWidth="150" d:DesignHeight="100" />
</DataTemplate>
L'ultime question est, comment puis-je configurer quelque chose pour que le viewmodel peut mettre le feu à la OnActivateGlow événement?
Vous devez vous connecter pour publier un commentaire.
Mise à jour: Firoso, comme mentionné dans les commentaires, vous devriez être en mesure de (je pense - c'est à dire non testé) être en mesure d'utiliser le mélange comportement des composants pour couvrir vos besoins.
En plus de télécharger et installer le SDK. Obtenir une copie de l'expression blend échantillons de la bibliothèque (vous aurez besoin de cliquer sur les Téléchargements à partir du lien suivant):
Expression Blend échantillons
Cette bibliothèque contient un déclencheur prédéfini appelé " DataEventTrigger que vous pouvez utiliser pour déclencher des actions en réponse à un événement sur votre déclaration de viewmodel.
Le mélange SDK a déjà (de ce que je peux dire) de l'autre pièce du puzzle - il comprend déjà une action qui vous permet de contrôler les storyboards. Le nom de cette action est "ControlStoryboardAction'.
Vous devriez vous retrouver avec quelques xaml qui ressemble à ceci:
Remplacer "YourEvent" avec le nom de l'événement que vous avez défini sur votre viewmodel, et remplacer "Storyboard1" avec le nom de votre storyboard. Bien sûr, les noms doivent correspondre exactement.
Voici l'espace de noms xaml définitions utilisées:
Post Original, avant edit:
Vous suggère de regarder dans Expression Blend Comportements:
informations
Blend SDK
vidéo sur les comportements
Vous pouvez aussi mettre un booléen IsGlowing bien sur votre viewmodel et l'utilisation datatriggers dans votre style
Je crois que vous devez le lier à un
RoutedEvent
, par exemple, pas un CLR événement.Je n'ai pas essayé, mais quelque chose comme cela devrait fonctionner:
Une façon que j'ai trouvée pour résoudre ce problème consiste à utiliser des données de déclenchement sur un DataTemplate qui contient la commande ci-dessus... probablement pas la meilleure façon de faire cela, cependant. Je suis toujours ouvert à de meilleures idées.