Dzień dobry mam kilka pytań co do WPF. Pisałem aplikację dla jednej firmy na praktyki, miała się ona łączyć z serwerem i wysłać odpowiednie zapytania i prezentować odpowiedzi serwera. Potrzebna była masa okienek i rozwiązałem ten problem za pomocą fukncji która przepisywała adresy okienek do tablicy okienek.
https://github.com/Akihito759/ArcPrime <- tutaj w klasie display. Zrobiłem tak ponieważ nie potrafiłem przy akcji zmodyfikować funkcji abym mógł zmieniać zawartość okienk. Podejrzeam, że jest to zrobione okropnie. Moje pytanie jest następujące jak zrobić to poprawie i ładnie? Pondato jaką lekturę dotycząca WPF byście polecili ? Zależy mi właśnie na tym jak pisać całą logikę kodu i jak napisać odpowiednio wyświetlanie ?
Polecam zainteresować się czymś co zowie się IoC Container
. Okienek do żadnej tablicy nie trzeba wpisywać. Grunt to mieć ladnie rozplanowany projekt w katalogach i kontenerek IoC do zarządzania wstrzykiwanymi zaleznościami albo i nawet samymi oknami.
Natomiast logikę najlepiej wydelegować o ogóle do osobnego projektu, który będzie dla Ciebie takim modelem danych. Okna i podłączone do nich code behind albo viewmodele, w zależnosci od tego jak mocno korzystasz z mvvm, niech tylko wywołują metody tego modelu. Masz dzięki temu osobny projekt, który można ładnie testować pod kątem samej tylko logiki, nazwijmy to biznesowej.
Dla WPF polecam zastosowanie mvvm.
Dziękuję za odpowiedź. Mam jeszcze pytanie czy aktualizacja po danych poprzez nazwatextbox.text jest najbardziej poprawna?
To zależy z jakiego podejścia korzystasz:
- Jeżeli programujesz zdarzeniowo w code-behind, tak jak się to robi w WinForms, to jest to jak najbardziej poprawne.
- Jeżeli natomiast zdecydowałeś się na mvvm to własność
Text
jest bindowana do własności udostępnianej przez viewmodel i nazwa kontrolki praktycznie nie jest wtedy używana. Unika się po prostu przesyłania do viewmodelu całych kontrolek, bo wtedy z takiego viewmodelu robi się zwyczajnie drugie code-behind i to nie ma sensu.
PS: Oczywiście w samym tylko code-behind również możesz używać bindowania danych. Wszystko zależy od podejścia.