[C# wpf]Singleton a główne okno


(klemensior15) #1

Czy istnieje możliwość stworzenia singleton'a z głównego okna (MainWindow.xaml.cs)? Jeśli tak to w jaki sposób?

Dziękuję za wszelkie podpowiedzi.


(Fiołek) #2

Okno nie powinno być singletonem, nie od tego one są, ale nic nie stoi na przeszkodzie ręcznie ustawić Application.MainWindow w zdarzeniu Application.Startup Twojego głównego obiektu(klasy) aplikacji. Ew. odwołuj się do głównego okna przez Application.MainWindow rzutując go na swoją klasę i ignorując programowe zabezpieczanie przed stworzeniem dwóch instancji.


(klemensior15) #3

To czy może istnieje inna możliwość by odwoływać się do metod tudzież pól bez tworzenia nowych obiektów. Coś na zasadzie globalnych metod, zmiennych, tylko w sposób jak najbardziej poprawny. Może pytam się o głupoty jednak próbuję pisać od niedawna.


(Fiołek) #4

Najpierw to upewnij się dwa razy, czy potrzebujesz globalnych metod i zmiennych. Przeważnie to nie jest potrzebne(co więcej, przeważnie to nie jest pożądane). A jeśli nadal jesteś pewien, że potrzebujesz czegoś takiego, to dopóki to nie jest strasznie skomplikowane(nie ma wielu zależności między częściami składowymi) masz do dyspozycji statyczne pola, właściwości i metody, wykorzystaj je. Jeśli nadal chcesz mieć singleton, to po prostu go stwórz.


(somekind) #5

Na 90% rozwiązaniem Twojego problemu jest przeniesienie kodu z MainWindow do innej klasy.


(klemensior15) #6

I tak dokładnie zrobiłem. Napotkałem jednak problem jak powiadomić np. textBlock'a z poziomu innej klasy o konieczności zmiany wartości.

Czy do tego celu najlepsze będą zdarzenia? Czy konieczne są jakieś zabezpieczenia przed wątkami?

W jaki sposób wygląda stworzenie takiego poprawnego eventu?


(Fiołek) #7

Musisz zaimplementować INotifyPropertyChanged i reszta będzie obsłużona za Ciebie(o ile bindingi masz poprawnie ustawione).