IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Réinitialisation propriété liée


Sujet :

Windows Presentation Foundation

  1. #1
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 82
    Points
    82
    Par défaut Réinitialisation propriété liée
    Bonjour,

    Expérimenté en Framework 2, je m'initie (enfin) depuis quelques semaines à WPF et à MVVM avec plaisir. Pour un projet, je cherche à créer un contrôle simple permettant d'afficher un message pour quelques secondes avant de disparaître. J'ai donc créé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    <TextBlock x:Class="ProjetTest.View.XFadeTextBlock" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:sys="clr-namespace:System;assembly=mscorlib">
     
        <TextBlock.Style>
            <Style TargetType="TextBlock">
                <Setter Property="Opacity" Value="0" />
                <Style.Triggers>
                    <DataTrigger Binding="{Binding MessageInfo}" Value="{x:Null}">
                        <DataTrigger.ExitActions>
                            <BeginStoryboard>
                                <Storyboard FillBehavior="Stop">
                                    <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
                                        <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
                                        <LinearDoubleKeyFrame KeyTime="0:0:2" Value="1" />
                                        <LinearDoubleKeyFrame KeyTime="0:0:3" Value="0" />
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </BeginStoryboard>
                        </DataTrigger.ExitActions>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </TextBlock.Style>
    </TextBlock>
    Le contrôle a pour DataContext un ModelView contenant une propriété MessageInfo par défaut à null. Lorsque j'affecte une valeur à MessageInfo le contrôle apparait en affichant le texte, puis disparait progressivement comme prévu. J'aimerais simplement que la valeur de la propriété MessageInfo se réinitialise après affichage. Mais je ne vois pas comment obtenir ceci, sachant que pour respecter le modèle MVVM je crois comprendre qu'il vaudrait mieux que ça soit fait dans le code XAML du contrôle.

    Merci d'avance de vos conseils.

  2. #2
    Membre régulier
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Points : 82
    Points
    82
    Par défaut
    Bon. Un peu déçu de constater que ça ne semble intéresser personne.

    En fin de compte j'ai contourné mon problème en procédant autrement :

    J'utilise un trigger sur la modification de la valeur de la propriété liée plutôt que le fait qu'elle soit non nulle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       <TextBlock.Triggers>
            <EventTrigger RoutedEvent="Binding.TargetUpdated">
                <BeginStoryboard>
                    <Storyboard>
                        <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Opacity">
                            <LinearDoubleKeyFrame KeyTime="0:0:0" Value="1" />
                            <LinearDoubleKeyFrame KeyTime="0:0:2" Value="1" />
                            <LinearDoubleKeyFrame KeyTime="0:0:2.5" Value="0" />
                        </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
                </BeginStoryboard>
            </EventTrigger>
        </TextBlock.Triggers>
    Et lors de l'instanciation de mon contrôle je le lie avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Text="{Binding MessageInfo, NotifyOnTargetUpdated=True}"
    (MessageInfo étant bien sûr ma propriété liée côté Model View)

    De cette façon il réagit bien à chaque affectation d'un nouveau message à afficher. Par contre évidemment si je tente de réafficher le même message plusieurs fois cela ne marche pas. Mais je ne vois pas comment faire autrement. Ca reste au moins une solution que je trouve relativement élégante et respectueuse du MVVM.

    En espérant que ça aide d'autres devs...

Discussions similaires

  1. [WD-2010] Macro récupérant le contenu d'une propriété liée à Sharepoint.
    Par Dredlox dans le forum VBA Word
    Réponses: 7
    Dernier message: 22/07/2013, 22h37
  2. Réponses: 0
    Dernier message: 21/03/2008, 15h10
  3. Propriété : Tablé liée ou locale ?
    Par Jean-Philippe André dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/10/2007, 12h11
  4. Accéder aux propriétés d'une feuille de style liée
    Par b Oo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/05/2006, 08h34
  5. Réponses: 12
    Dernier message: 12/12/2004, 14h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo