Ich möchte meine MainWindow zu einem Singleton machen, weil ich den Zugriff von allen anderen Fenstern in meiner App aus erleichtern möchte. Aber ich konnte es nicht laufen lassen. Hier ist was ich getan habe.Wie mache ich mein WPF MainWindow zu einem Singleton?
Wie üblich, habe ich den MainWindow-Subunternehmer privat gemacht und eine public static MainWindow Instance
-Eigenschaft erstellt, um eine statische Instanz zurückzugeben. Wenn ich es ohne weitere Änderungen ausführte, bekam ich den Fehler "Keine Quelle verfügbar". Ich googelte das Internet und fand ein verwandtes Thema unter http://www.netframeworkdev.com/windows-presentation-foundation-wpf/xamlc-singleton-class-80578.shtml. Ich konnte es jedoch nicht so machen, wie es dort vorgeschlagen wurde. Einige schlagen vor, eine Änderung in MainWindow.xaml von
<Window x:Class="TestApp.MainWindow"
zu
<Window x:Class="TestApp.MainWindow.Instance"
zu machen, die logisch aussieht. Jedoch, als ich dies tat, bekam ich Tonnen von Kompilierungsfehlern (das erste besagt, dass der Namespace TestApp bereits eine Definition von 'MainWindow' enthält.)
Ich fand viele Artikel im Internet darüber, wie Einzelinstanz-App zu machen. Ich suche das nicht. Ich möchte nur meine MainWindow zu einem Singleton machen. Ich habe es oft in WinForm-Apps gemacht.
Sie müssen dies in einem statischen Konstruktor oder faul im 'Instance'-Getter tun. Auch für Singleton machen Sie Konstruktoren normalerweise privat. In Ihrem Beispiel können die Benutzer mehrere MainWindow-Instanzen erstellen, und die letzte Instanz wird "Instance" zugewiesen. –
Zumindest, wenn Sie das Singleton-Muster ordnungsgemäß implementieren möchten. Dieser Code funktioniert natürlich in dem Sinne, dass andere Klassen über die 'Instance'-Eigenschaft auf das Hauptfenster zugreifen können, aber es ist kein" reiner "Singleton. IMHO –
Ja, ich stimme zu. Siehe den geänderten Code. – Yogesh