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:
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 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); } }
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.
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; }
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.
Partager