MVVM - strona logowania

0

Witam serdecznie,

Mam problem ze zrozumieniem wzorca MVVM w praktyce. Próbuję zrobić zwykłą stronę logowania.

Utworzyłem folder z Modelem, a w nim dwie klasy. User oraz Repository ze statyczną metodą GetUsers(), która zwraca IEnumerable<User> - chciałem tylko zastąpić czymś dostęp do bazy.

Następnie mój ViewModel ma MainPageViewModel oraz folder z klasą do Commandingu. W MainPageViewModel utworzyłem:

public DelegateCommand Command { get; set; }

W konstruktorze:

Command = new DelegateCommand(CommandAction, CommandCanExecute);

Oraz dwie metody:

        private void CommandAction(object obj)
        {
            //chciałbym zalogować się tutaj
        }

        private bool CommandCanExecute(object obj)
        {
            return true;
        }

W View w Code-behind ustawiłem tylko kontekst:

DataContext = new MainPageViewModel();

Natomiast w XAMLu, przy Buttonie mam:

Command="{Binding Command}"/>

Jeśli w metodzie CommandAction wpiszę coś do outputa, to wszystko gra. Problem w tym, że nie wiem jak:

  • przekazać dane z textboxów do ViewModelu
  • czy dobrym rozwiązaniem w ogóle jest Commanding? Nie chciałbym, żeby to działało jak Click(), tylko jak Tapped(). Czy obsługa jakichkolwiek metod powinna odbywać się w widoku? Bo tam są generowane...

Pewnie pytania trywialne, ale dla mnie, jako osoby początkującej, takie nie są.

Liczę na Waszą pomoc.

Pozdrawiam

1
  1. Rozbuduj swoją klasę ViewModel o właściwości User oraz Password.
  2. Powiąż te właściwości z TextBoxami również przez Binding, zwróć uwagę na Binding Mode.
  3. Po kliknięciu w przycisk wywołaj jakiś serwis od logowania z użyciem tych właściwości jako parametry metody, np.: loginService.login(User, Password).
0

Nie zauważyłem, że wcześniej się nie zalogowałem. Problem rozwiązany, już wszystko mi działa. Wielkie dzięki - niby proste, a męczyłbym się pewnie ze 2 dni!

0

W nawiązaniu do tego, co pisze maciejmt w komentarzu.

W jaki sposób zrobić to bezpiecznie? Co prawda teraz robię to tylko w celach dydaktycznych, ale dobrze wiedzieć, jak zrobić poprawnie.

0

Na StackOverflow przedstawione zostały pomocnicze rozwiązania.
Jednak w tym przypadku najrozsądniej jest naruszyć wzorzec MVVM i z poziomu ViewModel odwołać się bezpośrednio do komponentu PasswordBox aby pobrać hasło.

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