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 :

Binding User Control en MVVM [MVVM]


Sujet :

Windows Presentation Foundation

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Binding User Control en MVVM
    Bonjour,

    Je suis débutant en mvvm et j'essaie de créer un user control respectant ce schéma.
    Cependant, même après de longues recherches, je ne comprends toujours pas comment effectuer un binding entre un élément de celui-ci et ma ViewModel.
    Le binding réussi dans le constructeur de la VueModel, mais par après, en modifiant la source du binding, plus rien ne se passe :/
    Je suppose que j'oublie quelque chose mais je trouve pas quoi
    Merci beaucoup pour votre aide

    Voici mon code actuel :

    Mon UserControl
    Code de la Vue MyUserControl : 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
    <Window x:Class="TestUserControl.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:TestUserControl"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Button x:Name="btnShow" Content="Show Text" Command="{Binding ShowCommand}" Grid.Row="0"/>
            <local:MyUserControl x:Name="myusercontrol" Message="{Binding newMessage}" Grid.Row="1"/>
        </Grid>
    </Window>

    Code behind de mon user control : 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
    public partial class MyUserControl : UserControl
    {
        public string Message
        {
            get { return (string)GetValue(MessageProperty); }
            set { SetValue(MessageProperty, value); }
        }
        public static readonly DependencyProperty MessageProperty = DependencyProperty.Register( "Message", typeof(string), typeof(MyUserControl), new UIPropertyMetadata(OnMessageChanged));
     
        public static void OnMessageChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            if (e.NewValue != null)
                ((MyUserControl)sender).textBlock.Text = e.NewValue.ToString();
        }
     
        public MyUserControl()
        {
            InitializeComponent();
        }
    }

    Ma Vue
    Code de la fenêtre principale : 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
    <Window x:Class="TestUserControl.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:TestUserControl"
            mc:Ignorable="d"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition />
                <RowDefinition />
            </Grid.RowDefinitions>
            <Button x:Name="btnShow" Content="Show Text" Command="{Binding ShowCommand}" Grid.Row="0"/>
            <local:MyUserControl x:Name="myusercontrol" Message="{Binding newMessage}" Grid.Row="1"/>
        </Grid>
    </Window>

    Code behind de la fenêtre principale : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public partial class MainWindow : Window
        {
            private ViewModel _viewModel;
            public MainWindow()
            {
                InitializeComponent();
                _viewModel = new ViewModel();
                DataContext = _viewModel;
            }
        }

    Ma Vue Model
    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
    public class ViewModel
        {
            public string newMessage { get; set; }
            public ICommand ShowCommand { get; set; }
     
            public ViewModel()
            {
                newMessage = "test";
                ShowCommand = new BaseCommand(ShowMessage, (param) => { return true; });
            }
     
            private void ShowMessage(object obj)
            {
                Console.WriteLine("Je passe par la commande");
                newMessage = "TEST";
            }
        }

  2. #2
    Membre actif
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Points : 297
    Points
    297
    Par défaut
    Bonjour,

    Je n’ai pas vérifier tout ton code, mais en premier lieu, je remarque que tu as binder la propriété Message de ton UserControl sur la la propriété newMessage de ton VM : Ok.
    Par contre, ta VM n'implémente pas INotifyProperty, c'est cette partie là qu'il te manque je pense.
    En gros, quand ta propriété newMessage change, personne n'est au courant.

    Bonne continuation.
    L’aléatoire n’existe pas en informatique, c’est juste un moyen de dire que l’on a pas encore compris.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Oh le boulet que je suis... Merci de m'avoir corrigé!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WPF] User Control TreeView et binding MVVM
    Par ST4LKER dans le forum Développement Windows
    Réponses: 0
    Dernier message: 06/05/2015, 11h40
  2. Réponses: 0
    Dernier message: 02/05/2011, 17h37
  3. Problème Binding user control
    Par kite37 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 28/09/2009, 18h26
  4. Binding User Control
    Par KoRiGaN44 dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 29/04/2009, 10h55
  5. Binding dans user control
    Par baboutom dans le forum Windows Forms
    Réponses: 5
    Dernier message: 11/02/2009, 23h15

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