Bonjour @ tous,

Je me suis mis au MVVM en suivant ce tuto très bien fait: http://www.dotnetcurry.com/wpf/1037/...view-viewmodel
Seulement, en voulant aller plus loin, je rencontre des cas de figures propres à ce pattern dont je ne maitrise pas encore les subtilités.

Mon problème est que si je fait appel à execute() d'unRelayCommand et que mon add() ne se fait pas en BDD (email mal formé, ...), la page se rafraichit automatiquement et tous mes champs se retrouvent vide.
J'aimerais maitriser cet aspect.

Dans mon cas, j'ai des interfaces bindées aux viewmodel.
Et admettons que je veuille ajouter un utilisateur par exemple. j'ai donc ce code behind:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public MvvmUserEdit() {
            InitializeComponent();
            this.DataContext = new ViewModelLocator().Main; //Liaison de l'interface au viewmodel
        }
 
        private void btnVal_Click(object sender, RoutedEventArgs e) { // Clic sur le bouton Valider
            var m = ((MainViewModel)this.DataContext);
            m.SaveCommand.Execute(m.EmpInfo); // Appel au viewModel
            if (string.IsNullOrEmpty(m.msgErr)) { // OK
                Appelant.basculeMode();
            } else { // Il y a eu une erreur
                MessageBox.Show(m.msgErr);
            }
        }
Et dans mon viewmodel:
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 MainViewModel(IDataAccessService servPxy) {
            _serviceProxy = servPxy;
            EmpInfo = new tblUser();
            Employees = new ObservableCollection<tblUser>();
           ...
            SaveCommand = new RelayCommand<tblUser>(SaveEmployee);
            ...
            ReceiveEmployeeInfo();
            }
        void SaveEmployee(tblUser emp) {
            msgErr = string.Empty;
                EmpInfo = _serviceProxy.Add(emp); // Ajout en BDD
                if ((EmpInfo != null) && (EmpInfo.id != 0)) { // Ajout OK
                    Employees.Add(EmpInfo);
                    RaisePropertyChanged("EmpInfo");
                } else // Ajout KO (dans mon cas, il passe par ici).
                    msgErr = tblUser.msgErr;
        }
Dès que le MessageBox est passé, ma fenêtre se réinitialiser... Pire, si je rerenseigne les champs et que je revalide, il me fait une erreur d'instanciation.
Bref, si je dois gérer manuellement les rechargements de pages et de champs, je ne voit plus l’intérêt du MVVM.

Comment Annuler les effets du click (je suppose que c'est le INotifyPropertyChanged du tblUser qui déclenche tout ça).

Merci d'avance.