Chcę, aby mój MainWindow był singletonem, ponieważ chcę, aby dostęp do niego ze wszystkich innych okien w mojej aplikacji był łatwiejszy. Ale nie mogłem go uruchomić. Oto co zrobiłem.Jak uczynić moje WPF MainWindow singleton?
Jak zwykle, wykonałem zlecenie MainWindow jako prywatne i utworzyłem właściwość public static MainWindow Instance
, aby zwrócić wystąpienie statyczne. Kiedy po prostu uruchomię go bez żadnych innych zmian, dostaję komunikat "Brak dostępnego źródła". Przeszukałem Internet i znalazłem jeden powiązany temat pod adresem http://www.netframeworkdev.com/windows-presentation-foundation-wpf/xamlc-singleton-class-80578.shtml. Jednak nie mogłem sprawić, by działało tak, jak to sugerowano. Niektórzy sugerują, aby dokonać zmian w MainWindow.xaml z
<Window x:Class="TestApp.MainWindow"
do
<Window x:Class="TestApp.MainWindow.Instance"
który wygląda logicznie. Jednak kiedy to zrobiłem, mam mnóstwo błędów kompilacji (pierwsza mówi, że przestrzeń testowa Testation zawiera już definicję "MainWindow".)
Znalazłem wiele artykułów w Internecie na temat tworzenia aplikacji pojedynczej instancji. Nie szukam tego. Po prostu chcę, aby mój MainWindow był singletonem. Zrobiłem to wielokrotnie w aplikacjach WinForm.
Musisz to zrobić w statycznym konstruktorze lub leniwie w pobierającym 'Instance'. Ponadto, w przypadku singletonu zazwyczaj tworzysz konstruktorów jako prywatne. W twoim przykładzie konsumenci mogą tworzyć wiele instancji MainWindow, a ostatnia zostanie przypisana do 'Instance' –
Przynajmniej jeśli chcesz poprawnie zaimplementować wzorzec singleton. Kod ten będzie oczywiście działał w tym sensie, że inne klasy mogą uzyskać dostęp do głównego okna z właściwości 'Instance', ale nie jest to" czysty "singleton IMHO –
Tak, zgadzam się. Zobacz zmodyfikowany kod. – Yogesh