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

C# Discussion :

Actualisation d'un controle après un evenement (iNotifyPropertyChanged)


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Septembre 2009
    Messages : 9
    Par défaut Actualisation d'un controle après un evenement (iNotifyPropertyChanged)
    Bonjours !!!



    Je suis novice dans le domaine, et je suis entrain de travailler sur un projet, et pour ma classe principal j'utilise l'INotifyPropertyChanged pour attacher un evenement au changement de mes variables.



    J'ai une classe "Contexte", qui contient la variable a afficher:
    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
     
        public class Contexte : MainWindow
        {
            private string noms;
            public string Noms
            {
                get
                {
                    return noms;
                }
                set
                {
                    if (value == noms)
                        return;
                    noms = value;
                    NotifyPropertyChanged("Noms");
                }
            }
        }
    Et ma classe MainWindow de la fenêtre principale:


    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
    36
    37
    38
    39
    40
    41
    42
     
        public partial class MainWindow : Window, INotifyPropertyChanged
        {
            private static Contexte contexte;
     
            int index = 0;
     
            public MainWindow()
            {
                InitializeComponent();
            }
     
            private void window_Loaded(object sender, RoutedEventArgs e)
            {
                contexte = new Contexte
                {
                    Noms = "Alpha PREMIER"
                };
     
                DataContext = contexte;
            }
     
            private void buttonUpdate_Click(object sender, RoutedEventArgs e)
            {
                contexte.Noms = "Julien DUBOIS";
            }
     
            public void updateView()
            {
                TextBlock_Titre.Text = "Profil de JULIEN";
            }
     
            public event PropertyChangedEventHandler PropertyChanged;
            public void NotifyPropertyChanged(string nomPropriete)
            {
                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs(nomPropriete));
                     updateView();
                }
            }
        }
    Et le code XAML de MainWindow


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        <Grid>
            <StackPanel HorizontalAlignment="Left" Margin="10,10,0,10" Width="200">
                <TextBlock  name="TextBlock_Titre" Height="25"/>
                <TextBlock Text="{Binding Noms}" Height="25"/>
            </StackPanel>
            <TextBox Name="textBox_index" HorizontalAlignment="Left" Height="23" Margin="215,10,0,0" Text="0" VerticalAlignment="Top" Width="100"/>
            <Button Content="Update" Click="buttonUpdate_Click" HorizontalAlignment="Left" Margin="215,38,0,0" VerticalAlignment="Top" Width="100"/>
        </Grid>

    Le problème est qu'après clique sur le bouton "Update", l'interface est automatiquement mise à jours, mais le titre (TextBlock_Titre) ne change toujours pas.

    Merci++ pour votre aide

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur / architecte
    Inscrit en
    Juillet 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur / architecte

    Informations forums :
    Inscription : Juillet 2009
    Messages : 473
    Par défaut
    C'est normal... C'est ton archi tirée par les cheveux qui t'induit en erreur... Tu veux faire du MVVM si je ne m'abuse?
    Le problème c'est que ton contexte est une sous classe de la MainWindow (ce qui en MVVM est contre-nature)... Mais ton contexte est une instance séparée....
    Ca marche pour le champs bindé parce qu'il est bien justement correctement bindé sur ton contexte.
    Alors que TextBlock_Titre fait partie du contexte aussi, mais n'est pas bindé à la fenêtre affichée... L'instance de la classe contexte a beau être dérivée de MainWindow, c'est pas pour cela que c'est la même instance (ni même affichée)....
    Je pense qu'il faut surtout se décider entre MVVM et "tout en un": et surtout pourquoi le contexte dérive de la MainWindow...
    Bon courage !

Discussions similaires

  1. [VB.NET] Contrôle dynamique et évènements
    Par johann.C dans le forum ASP.NET
    Réponses: 4
    Dernier message: 30/11/2009, 10h45
  2. Actualisation de la page après modification
    Par Invité dans le forum Langage
    Réponses: 14
    Dernier message: 02/11/2006, 21h18
  3. Réponses: 3
    Dernier message: 27/04/2006, 16h29
  4. Réponses: 7
    Dernier message: 13/04/2006, 11h56
  5. [VB.NET] Création de control après ouverture du form
    Par boulete dans le forum Windows Forms
    Réponses: 1
    Dernier message: 27/03/2006, 12h06

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