Zakładki z WPF gubią kontent przy przełączaniu

0

Cześć,
piszę swoją tak naprawdę pierwszą aplikację z wykorzystaniem WPF i wzorca MVVM no i natknąłem się na pewien problem.

W skrócie, staram się zachować w aplikacji założenia wzorca MVVM, ale nie wykorzystuję żadnych wspomagających bibliotek jak Prism lub podobne. Chcę najpierw zrozumieć jak to działa na "surowo". Aplikacja posiada okno główne które zawiera element TabControl, zawartość każdej zakładki to osobny UserControl, każdy posiada swój ViewModel. Odpowiednie properties są zbindowane z controlkami w swoich View, przyciski działają jak trzeba. Jednak gdy wypełniam potrzebne TextBoxy w zakładce w czasie działania programu, przechodzę na kolejną zakładkę i wracam do poprzedniej to zawartość kontrolek jest pusta, tzn. przy każdym włączeniu zakładki tworzona jest nowa instancja ViewModelu. Ja jednak potrzebuję mieć te dane widoczne w zakładkach w czasie całego działania programu.

Póki co poradziłem sobie tworząc singletona, który przetrzymuje potrzebne dane a każdy ViewModel w konstruktorze wypełnia nimi odpowiednie TextBoxy. W zasadzie każda zakładka korzysta z tych samych danych, więc jakoś to działa. Druga sprawa jest taka, że nie potrzebuję żadnej bazy danych bo aplikacja ma przetworzyć wprowadzone przez użytkownika dane i na ich podstawie wygenerować plik.

Szukałem rozwiązania na Stacku ale jedyne co znalazłem to post z 2012 roku lub posty odwołujące się do niego, w każdym razie wszystkie kierują do tego artykułu:wyłączenie wirtualizacji zakładek. Jest to dość skomplikowane, czy ktoś ma może lepszy, nowszy sposób, bez wspomagających bibliotek typu Prism, który rozwiązałby ten problem?

2

Użyj jednego, wspólnego ViewModelu, który ma wszystkie właściwości albo w sobie każdy ViewModel danej zakładki

1

Twój view model nie powinien być tworzony przez usercontrol, zrób tak jak zasugerował @nerdxg, czyli view modele dla poszczególnych stron żeby były trzymane w view modelu okna głównego.

Rozwiąże to problem znikających danych, ale niestety nie rozwiąże problemu virtualizacji zakładek, z którym pewnie i tak przyjdzie Ci się kiedyś zmierzyć jeśli zwiążesz się z WPF na dłużej :). Kod z przytoczonego artykułu z tego co pamiętam nie do końca działa dobrze, i zrobienie tabcontrolki bez wirtualizacji stron nie jest prostą sprawą :).

0

Ok, dzięki za podpowiedzi, w sumie hierarchizacja ViewModeli spójna z hierarchią View wydaje się rozsądna. Czy znacie może jakiś artykuł albo dobry tutorial, który pomógłby mi zapoznać się lepiej z wirtualizacją zakładek?

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