bonjour,

voilà j'ai fait une petite appli test en silverlight 3 avec mvvm light toolkit.

côté xaml, voici ce que j'ai:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
<Button cmd:ButtonBaseExtensions.Command="{Binding AjouterPersonnel}"  Content="Ajouter la personne" Height="25" HorizontalAlignment="Left" Margin="93,211,0,0" VerticalAlignment="Top" Width="166" />
        <TextBox Text="{Binding PersonneSaisie.Num, Mode=TwoWay, UpdateSourceTrigger=Default}" x:Name="champsNum" Height="22" HorizontalAlignment="Left" Margin="93,43,0,0" VerticalAlignment="Top" Width="166"/>
        <TextBox Text="{Binding PersonneSaisie.Nom, Mode=TwoWay, UpdateSourceTrigger=Default}" x:Name="champsNom" Height="22" HorizontalAlignment="Left" Margin="93,74,0,0" VerticalAlignment="Top" Width="166"/>
        <TextBox Text="{Binding PersonneSaisie.Prenom, Mode=TwoWay, UpdateSourceTrigger=Default}" x:Name="champsPrenom" Height="22" HorizontalAlignment="Left" Margin="93,105,0,0" VerticalAlignment="Top" Width="166"/>
        <TextBox Text="{Binding PersonneSaisie.Mail, Mode=TwoWay, UpdateSourceTrigger=Default}" x:Name="champsMail" Height="22" HorizontalAlignment="Left" Margin="93,136,0,0" VerticalAlignment="Top" Width="166"/>
        <TextBox Text="{Binding PersonneSaisie.Fonction, Mode=TwoWay, UpdateSourceTrigger=Default}" x:Name="champsFonction" Height="22" HorizontalAlignment="Left" Margin="93,167,0,0" VerticalAlignment="Top" Width="166"/>
j'ai donc un bouton bindé sur ma commande de sauvegarde d'un personne, et plusieurs champs de saisie num nom prénom mail fonction.

côté view model, voici ce que j'ai:
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
#region PersonneAjoutee property
        public const string PersonneAjouteeName = "PersonneSaisie";
 
        private Personnel _personneSaisie = null;
 
        public Personnel PersonneSaisie
        {
            get
            {
                return this._personneSaisie;
            }
 
            private set
            {
                if (this._personneSaisie == value)
                {
                    return;
                }
 
                this._personneSaisie = value;
 
                RaisePropertyChanged(PersonneAjouteeName);
            }
        }
        #endregion
j'ai mon objet de type "personnel" qui est instancié dans le constructeur de mon viewModel.. jusque là pas de pb.

pour ma commande voici le code:
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
#region SaveCommand
        private void CommandeAjouterPersonnel()
        {
            AjouterPersonnel = new RelayCommand(ExecuteSaveCommand,CanExecuteSaveCommand);
        }
 
        public ICommand AjouterPersonnel { get; internal set; }
 
        public void ExecuteSaveCommand()
        {
            srvPersonnelClient.ajouterPersonnelAsync(PersonneSaisie.Num, PersonneSaisie.Nom, PersonneSaisie.Prenom, PersonneSaisie.Mail, PersonneSaisie.Fonction);
        }
 
        void srvPersonnelClient_ajouterPersonnelCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            ExecuterRafraichissement();
        }
 
        public bool CanExecuteSaveCommand()
        {
            if (this.PersonneSaisie == null || string.IsNullOrEmpty(this.PersonneSaisie.Num.ToString()) || string.IsNullOrEmpty(this.PersonneSaisie.Nom) || string.IsNullOrEmpty(this.PersonneSaisie.Prenom))
                return false;
            return true;
        }
        #endregion
les méthodes "AjouterPersonnelAsync" et "ExecuterRafraichissement" sont ok et testées.

mon soucis est que quand je lance mon appli, mon bouton d'enregistrement est grisé, normal vu que les champs num, nom et prénom ne sont pas encore renseignés et qu'il sont la condition de mon CanExecuteSaveCommand.

quand j'ai saisie le num, nom et prénom de la personne le champs ne se dégrise pas, comme si il ne savait pas en temps réel les changements effectués sur mes champs.

comment faire cette manip ?