Pytania odnosnie WPF przy użyciu wzorca MVVM ?

0

Witam,

zainteresowałem się ostatnio WPF'em i jako że jestem początkujący chciałbym uzyskać odpowiedź na nurtujące mnie pytania.

  1. W której z warstw powinna znajdować się walidacja pól (metody odpowiedzialne za walidacje, czy to ma być ViewModel jako że tam ma znajdować się logika biznesowa?)
  2. Znalazłem w jednym z tutoriali klasę RelayCommand, która jest niezbędna do wywołania komendy na butonie:
 
-----RelayCommand--------

 public RelayCommand(Action execute)
            : this(execute, null)
        {
        }

public RelayCommand(Action execute, Func<Boolean> canExecute)
{
            if (execute == null)
                throw new ArgumentNullException("execute");
            _execute = execute;
            _canExecute = canExecute;
}

--------Właściwość z ViewModel-------

    public ICommand Dodaj {
            get 
            {
                return new RelayCommand(DodajPlayera); 
            }
        }

pytanie tyczy się drugiego argumentu w konstruktorze do czego się go stosuję? Z początku przypuszczałem, że jest to warunek, czy komenda ta ma zostać wykonana. Jednak po dokładniejszym debugowaniu zaobserwowałem, że wykonuję się ona się cały czas, już po samym starcie programu.

Pozdrawiam

0

CanExecute wykonuje się od razu, jeśli zwróci false to blokuje button i nie można wywołać komendy.

0

ViewModel ma dostarczać tylko danych do widoku, logika biznesowa powinna być w modelu. IDataerrorinfo lub INotifyDataErrorInfo implementujesz na obiektach które przekazujesz do View oraz na samym View może być dodatkowo walidacja w zależności czego potrzebujesz View.

0

Dziękuje za odpowiedzi.

DibbyDum napisał(a):

ViewModel ma dostarczać tylko danych do widoku, logika biznesowa powinna być w modelu. IDataerrorinfo lub INotifyDataErrorInfo implementujesz na obiektach które przekazujesz do View oraz na samym View może być dodatkowo walidacja w zależności czego potrzebujesz View.

Co rozumieć pod postacią logiki biznesowej, gdyż nie wiem czy dobrze rozumiem to pojęcie? Czy to są metody klasy znajdujące się w modelu np.

 
public class Player{
     
   private string Imie;

   public void DodajPlayer(Player play) /// metoda logiki biznesowej??
   {
   
    }
}

Czy metoda taka powinna znajdować się właśnie w Modelu czy w ViewModel'u??

0

Sorry za literówki ale przykład miał tylko zobrazować problem... Oglądając X tutoriali zauważyłem, że są dwa sposoby realizacji MVVM. Mianowicie:

1.INotifyPropertyChanged implementowane jest w ViewModel. Wszelkie metody operujące na obiektach z modelu znajdują się również w ViewModel( ).
2. INotifyPropertyChanged implementowane jest w Model. Wszelkie metody operujące na obiektach z modelu znajdują się również w Model( ).

Które podejście jest prawidłowe? Dodatkowo niektóre tutoriale robią misz-masz, jestem strasznie zdezorientowany.
Proszę o pomoc!

0

Podany przykład będzie w Modelu. Ja jestem za podejściem podanym w punkcie drugim.

1 użytkowników online, w tym zalogowanych: 0, gości: 1