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

Silverlight Discussion :

Utilisation d'un exemple d'évenement [Débutant(e)]


Sujet :

Silverlight

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Par défaut Utilisation d'un exemple d'évenement
    Bonjour à tous,

    débutant en Silverlight, j'essaie d'utiliser un évement simple se respectant le modèle MVVM.
    Cet exemple que j'ai trouvé sur le Net correspond bien à mon besoin initial de mettre en majuscule le texte d'une textbox au fur à mesure de la saisie.

    Ce code se découpe de la facon suivante :

    Création d'une classe cConverter.cs contenant le code suivant :
    Code c# : 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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    using System;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Ink;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using System.Windows.Data;
    using System.Windows.Interactivity;
     
    namespace slnMySolution
    {
        public class cConverters
        {
     
        }
     
    public class UpperCaseAction : TriggerAction<TextBox> 
    { 
     
        protected override void Invoke(object parameter) 
        { 
            var selectionStart = AssociatedObject.SelectionStart; 
            var selectionLenght = AssociatedObject.SelectionLength; 
            AssociatedObject.Text = AssociatedObject.Text.ToUpper(); 
            AssociatedObject.SelectionStart = selectionStart; 
            AssociatedObject.SelectionLength = selectionLenght; 
        } 
    } 
     
    }


    Ensuite coté XAML, je dois inscrire le code suivant pour déclendcher l'évenement lors du changement de texte dans ma textbox...
    Code xaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
     
    <Grid x:Name="LayoutRoot" Background="White"> 
        <TextBox TextWrapping="Wrap" VerticalAlignment="Top" Margin="10"> 
            <i:Interaction.Triggers> 
                <i:EventTrigger EventName="TextChanged"> 
                      <i:InvokeCommandAction Command="UpperCaseAction"/>
                </i:EventTrigger> 
            </i:Interaction.Triggers> 
        </TextBox> 
    </Grid>

    et donc le Code behind à implémenter :
    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    System.Windows.Interactivity.EventTrigger eventTrigger = new System.Windows.Interactivity.EventTrigger("TextChanged"); 
    eventTrigger.Actions.Add(new UpperCaseAction());    
    System.Windows.Interactivity.Interaction.GetTriggers(myTextBox).Add(eventTrigger);

    Mon seul problème se situe dans la dernière partie de code, je n'ai aucune idée de la manière de l'utiliser (ou, pourquoi?).

    Je cherche donc une explication plus détaillée de cet exemple.

    Merci pour vos réponses.

    Seb

  2. #2
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    La partie code behind est la partie à implémenter si tu veux ajouter le trigger depuis du code. Soit tu le fait en XAML, soit tu le fais à partir du code behind. La personne qui à fait l'exemple à donné les deux manières, a toi de choisir suivant tes besoins.

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Par défaut
    Citation Envoyé par GuruuMeditation Voir le message
    La partie code behind est la partie à implémenter si tu veux ajouter le trigger depuis du code. Soit tu le fait en XAML, soit tu le fais à partir du code behind. La personne qui à fait l'exemple à donné les deux manières, a toi de choisir suivant tes besoins.
    merci GuruuMeditation.

    Du coup sans le savoir...j'ai correctement implémenter mon code et choisit l'utilisation du code XAML.

    Quel méthode vaut 'il mieux conserver pour se rapprocher de la norme MVVM ?
    l'utilisation du code Behind ou l'utilisation dans le code XAML.

    Par contre avec le code utilisé j'obtiens une Exception sur InitializeComponent(); de ma childWindow :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //Impossible de créer un 'System.Windows.Input.ICommand' à partir du texte 'UpperCaseAction'. [Line: 55 Position: 56]
     
    {System.Windows.Markup.XamlParseException: Impossible de créer un 'System.Windows.Input.ICommand' à partir du texte 'UpperCaseAction'. [Line: 55 Position: 56]
       à System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
       à slnMySolution.cwmyChildWindow.InitializeComponent()
       à slnMySolution.cwmyChildWindow..ctor(Int32 pMNF_ID)}
    si quelqu'un peut m'aider ?

  4. #4
    Membre éprouvé
    Profil pro
    Consultant informatique
    Inscrit en
    Septembre 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 99
    Par défaut
    Bonjour,

    Quel méthode vaut 'il mieux conserver pour se rapprocher de la norme MVVM ?
    l'utilisation du code Behind ou l'utilisation dans le code XAML.
    Aie ! Vaste question qu'est l'utilisation du code behind Dans le cas présent, tout peut être fait facilement via le XAML, donc on utilisera plutôt cette voie là.

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Par défaut
    Citation Envoyé par Lordinaire Voir le message
    Bonjour,Aie ! Vaste question qu'est l'utilisation du code behind Dans le cas présent, tout peut être fait facilement via le XAML, donc on utilisera plutôt cette voie là.
    merci Lordinaire pour cet avis, que j'ai pris en compte et que j'avais adopté.
    Ca réconforte pour la suite.....

    Par contre mon plantage décrit plus haut dans la discussion subsite toujours qi quelqu'un à une idée ???

  6. #6
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Personellement, je pense qu'il serait plus utile pour toi d'utiliser un Behavior que de complexifier avec du MVVM.

    Je reviens dans 5mn avec un exemple.

  7. #7
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Voici l'exemple d'un behavior qui met la première lettre de chaque mot en majuscule:

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    public class UpperCaseBehavior : Behavior<TextBox>
    {
    	protected override void OnAttached()
    	{
    		AssociatedObject.TextChanged += OnTextChanged;
     
    		base.OnAttached();
    	}
     
    	private void OnTextChanged(object sender, TextChangedEventArgs e)
    	{
    		var selectionStart = AssociatedObject.SelectionStart;
    		var selectionLength = AssociatedObject.SelectionLength;
     
    		var text = AssociatedObject.Text.ToCharArray();
     
    		for (int i = 0; i < text.Length; i++)
    		{
    			if ((i == 0 || text[i - 1] == ' ') && 'a' <= text[i] && text[i] <= 'z')
    				text[i] = Char.ToUpper(text[i]);
    		}
     
    		AssociatedObject.Text = new string(text);
     
    		AssociatedObject.SelectionStart = selectionStart;
    		AssociatedObject.SelectionLength = selectionLength;
    	}
     
    	protected override void OnDetaching()
    	{
    		AssociatedObject.TextChanged -= OnTextChanged;
     
    		base.OnDetaching();
    	}
    }
    Il s'utilise comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <TextBox>
    	<i:Interaction.Behaviors>
    		<TestTreeList:UpperCaseBehavior />
    	</i:Interaction.Behaviors>
    </TextBox>

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2011
    Messages : 8
    Par défaut
    Merci Nathanaël,

    je vais étudier ce code, vu que je ne connais pas la notion de Behavior.

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    C'est vrai que c'est très peu utilisé et c'est bien dommage tellement c'est puissant
    C'est dans la même DLL que les triggers System.Windows.Interactivity

  10. #10
    Rédacteur
    Avatar de lutecefalco
    Profil pro
    zadzdzddzdzd
    Inscrit en
    Juillet 2005
    Messages
    5 052
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : zadzdzddzdzd

    Informations forums :
    Inscription : Juillet 2005
    Messages : 5 052
    Par défaut
    Citation Envoyé par Nathanael Marchand Voir le message
    C'est vrai que c'est très peu utilisé et c'est bien dommage tellement c'est puissant
    C'est dans la même DLL que les triggers System.Windows.Interactivity
    Et tellement c'est lent

  11. #11
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Rooh mais non Tout dépend de ce que fait le Behavior c'est sur mais dans des cas comme celui que j'ai présenté ca ralenti pas spécialement.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/02/2010, 06h46
  2. Quel méthode est utilisée ds cet exemple, svp ?
    Par arnofly dans le forum Flash/Flex
    Réponses: 0
    Dernier message: 15/01/2010, 17h34
  3. Réponses: 13
    Dernier message: 18/10/2006, 16h09
  4. [XML]Exemples d'utilisation
    Par le Daoud dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 18/01/2006, 18h04
  5. Recherche des exemple d'utilisation
    Par lemme dans le forum Merise
    Réponses: 2
    Dernier message: 26/02/2003, 13h00

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