WPF/MVVM, NullReferenceException, Subskrybent znika z handlera eventu

0

Witajcie. Potrzebuję małej pomocy.
Robię program w WPF z użyciem MVVM. W głównym oknie wyświetlam różne widoki (UserControl) za pomocą kontrolki ContentControl, zmieniając je przyciskami. I działa.
W jednym widoku (shoppingList) mam przycisk za pomocą którego chcę zmienić widok na inny. Przypisałem do niego komendę, która wywołuje metodę podnoszącą event. W oknie głównym w konstruktorze dodałem jako subskrybenta metodę zmieniającą aktualny ViewModel w propercji do której binduje ContentControl.
Problem w tym, że podnoszenie eventu działa, ale info nie dociera do subskrybenta. Podczas debugowania wyszło mi, że subskrybent dodaje się prawidłowo (jak na moje), ale podczas wznoszenia eventu, handler nie posiada referencji do niego i wszystko leci w powietrze. NullReferenceException, gdy usunie się przypisanie tego pustego delegatu.

Kompletnie nie wiem gdzie mam błąd.

MainWindowView: http://pastebin.com/q6Hf7kvc
MainWindowViewModel: http://pastebin.com/VU21AVwt
ShoppingListViewModel: http://pastebin.com/RFSU364D

0

W której dokładnie linijce leci ten błąd?

2

Błąd wyskakiwał w 38 linii ShoppingListViewModel.
W kodzie napisanym w MainWindow założenie jest takie, że do istniejącego ViewModelu tworzy się instancję widoku, więc widok nie powinien dodatkowo sam tworzyć sobie kolejnej instancji ViewModelu.
Powodem tego błędu było przypisanie DataContex w xamlu wywoływanego widoku, co powodowało jak mniemam tworzenie nowej instancji ViewModelu podczas tworzenia widoku, i zastępowanie już istniejącej która w handlerze eventu posiadała odpowiednią referencję do subskrybenta.
Usunięcie pola DataContext rozwiązało problem.

Chyba dość klarownie wytłumaczyłem na czym polegał błąd.
Temat do zamknięcia, jednak gdyby ktoś miał jakieś uwagi co do stylu pisania, wykorzystywanych technik, założeń etc. to chętnie takie uwagi przyjmę.
Pozdrawiam i dziękuję za chęć pomocy.

0

Wrzuć link to github-a lub coś innego gdzie można podejrzeć cały kod to ktoś na pewno napisze swoje uwagi. ludzie lubią krytykować cudzy kod :p

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