Aktywne Wpisy
Vamyss +372
Ale jestem w-------y, prowadzę JDG jako ratownik medyczny. Chciałbym etat no ale niestety pogotowia w Polsce nie chcą ich tak łatwo rozdawać, a przynajmniej w moim regionie.
Ubrania robocze kupuje sam
Cały sprzęt - stetoskop, latarki diagnostyczne, latarki do pracy etc kupuje sam
Kursy
Ubrania robocze kupuje sam
Cały sprzęt - stetoskop, latarki diagnostyczne, latarki do pracy etc kupuje sam
Kursy

MonazoPL +29
Ruszamy z nowym #rozdajo – wygraj kartę podarunkową do Allegro o wartości 100 zł!
Aby wziąć udział w konkursie, zaplusuj ten wpis oraz w komentarzu krótko odpowiedz na pytanie konkursowe: W co inwestować w 2025 roku i dlaczego? ( ͡€ ͜ʖ ͡€)
––––––––––––––––––––––––––––––
Przy okazji coś o nas – MONAZO.PL to nowa platforma z promocjami bankowymi, ofertami na darmowe krypto i więcej. Mamy zaawansowane filtry, przyjazny design, a oferty tłumaczymy tak prosto, jak
Aby wziąć udział w konkursie, zaplusuj ten wpis oraz w komentarzu krótko odpowiedz na pytanie konkursowe: W co inwestować w 2025 roku i dlaczego? ( ͡€ ͜ʖ ͡€)
––––––––––––––––––––––––––––––
Przy okazji coś o nas – MONAZO.PL to nowa platforma z promocjami bankowymi, ofertami na darmowe krypto i więcej. Mamy zaawansowane filtry, przyjazny design, a oferty tłumaczymy tak prosto, jak
źródło: rozdajo wykop monazo 2
Pobierz




Mam pewien problem i za cholerę w internetach nie mogę znaleźć poprawnej implementacji jego rozwiązania. Rzecz dotyczy wzorca MVVM.
Zdecydowana większość prostych przykładów przedstawia:
* jeden widok, załóżmy wyświetlający wiek w textboxie (bindowanie OneWay),
* jeden viewmodel zawierający model,
* jeden model zawierający omawiane pole 'Wiek'
Jak wiemy, główną ideą wzorca MVVM jest odesparowanie widoku od modelu poprzez ViewModel. Powiedzmy że jeśli chodzi o aktualizowanie pola 'Wiek' z widoku, możemy to zrealizować tak, że w ViewModel stworzymy właściwość 'Wiek', a widok będzie miał przycisk do którego będzie podpięta komenda która będzie aktualizowała właściwość 'Wiek' w modelu właściwością 'Wiek' z ViewModelu. W ten sposób unikniemy bindowania bezpośrednio do modelu.
Problem pojawia się jeśli cokolwiek z zewnątrz aktualizuje nam pole 'Wiek' i chcemy to zaktualizować w widoku. Przy rozwiązaniu przedstawionym w poprzednim akapicie... nie da się. Co z tego że w modelu zaimplementujemy INotifyPropertyChanged, skoro nie wywoła to OnPropertyChanged() już w odpowiadającej właściwości samym ViewModelu? Rozwiązanie to bindowanie prosto do modelu, ale przecież mieliśmy odseparować widok od modelu... Kolejną opcją jaka przychodzi mi do głowy jest zasubskrybowanie PropertyChanged z modelu w ViewModelu i po wywołaniu tego eventu, zaktualizowanie odpowiadającej właściwości w ViewModelu.
Wiem że zakręciłem, ale jak przeczytacie trzy razy to w końcu zrozumiecie. ;) Pytania brzmią:
1. Jak powinno być zaimplementowane rozwiązanie podanego problemu (jedna właściwość, twoway binding, MVVM)?
3. W jaki sposób ViewModel powinien być pośrednikiem między widokiem a modelem w bindowaniu dwukierunkowym?
ViewModel (implementuje INotifyPropertyChanged):
Wiek { get{ return model.wiek;} set{ if(model.wiek != value){_model.wiek = value; OnPropertyChanged();}}
model nie implementuje INotifyPropertyChanged
edit: komendy aktualizują ViewModel
Nie do końca rozumiem Twoje pytanie. View-Model ma przetwarzać dane reprezentowane przez Model i udostępniać je dla View poprzez upublicznianie swoich właściwości
INotifyPropertyChangedw klasach, które są obserwowane przez inne obiekty. Po co implementujesz ten interfejs w klasie modelu, skoro (jak się domyślam) nikt go nie obserwuje? Skoro View obserwuje View-Model w celu aktualizacji UI, to niech View-Model będzieINotifyPropertyChanged, a nie Model.Prawdopodobnie w końcu zadałem to pytanie w googlu poprawnie i znalazłem taką oto odpowiedź:
http://stackoverflow.com/questions/15439841/mvvm-in-wpf-how-to-alert-viewmodel-of-changes-in-model-or-should-i
Jak widać w najlepszej odpowiedzi, INotifyPropertyChanged w modelu i subskrybowanie PropertyChanged w ViewModelu to chyba jedyna opcja...
Zadam Ci inne pytanie: czy
Wiekto tylko opakowana w klasę liczba całkowita? Jeżeli tak, to jakiego typu jest właściwość do której bindujesz we View-Model-u?Odchodząc od przykładu z aktualizowaniem danych po sockecie: powiedzmy że przypadek dotyczy modelu wyświetlanego przez widok, ale zmienianego przez zupełnie inny obiekt niż ViewModel. Cytując fragment najlepszej odpowiedzi ze stacka:
"But typically this is only needed if more than one object will be making changes to the Model's data, which is not
Nie ma jednego uniwersalnego najlepszego rozwiązania. Dla małych modeli powinno się bindować całe obiekty i użyć atrybutu
PropertyPathw widoku - stąd też pytałem o charakter klasyWiek.@lavsprat: tak, są różne szkoły. Ale czy to rozwiązanie przypadkiem nie zaprzecza głównej idei MVVM o której wspomniałem na początku, czyli absolutnego odseparowania widoku od modelu? Tak, rozumiem, mały model, ale mimo wszystko. :)
PropertyPath, żeby można było sobie wyłuskać interesujące pole.Pracownikto gruba przesada.Jeżeli mamy
Pracownika, który maImię,NazwiskoiWiek, to zdecydowanie modelem powinien być jedyniePracownik. https://en.wikipedia.org/wiki/Spaghetti_code#Ravioli_code