Я хочу сделать мой MainWindow синглтон, потому что я хочу сделать доступ к нему из всех других окон в моем приложении проще. Но я не мог заставить его бежать. Вот что я сделал.Как сделать мой WPF MainWindow одиночным?
Как обычно, я сделал основной подрядчик MainWindow и создал свойство public static MainWindow Instance
, чтобы вернуть статический экземпляр. Когда я просто запускаю его без каких-либо изменений, я получил ошибку «Нет источника». Я googled в Интернете и нашел одну связанную тему в http://www.netframeworkdev.com/windows-presentation-foundation-wpf/xamlc-singleton-class-80578.shtml. Однако я не мог заставить его работать, как было предложено. Некоторые предлагают внести изменения в MainWindow.xaml от
<Window x:Class="TestApp.MainWindow"
в
<Window x:Class="TestApp.MainWindow.Instance"
который выглядит логичным. Однако, когда я это сделал, у меня появилось множество компиляционных ошибок (первый говорит, что пространство имен TestApp уже содержит определение «MainWindow».)
Я нашел много статей в Интернете о том, как сделать одно приложение экземпляра. Я не ищу этого. Я просто хочу сделать мой MainWindow синглом. Я делал это в приложениях WinForm много раз.
Вы должны сделать это в статическом конструкторе или лениво в «экземпляре» getter. Кроме того, для singleton вы обычно делаете конструкторы частными. В вашем примере потребители могут создавать несколько экземпляров MainWindow, а последний будет назначен «Экземпляр» –
По крайней мере, если вы хотите правильно реализовать шаблон singleton. Этот код, очевидно, будет работать в том смысле, что другие классы могут получить доступ к главному окну из свойства 'Instance', но это не« чистый »singleton IMHO –
Да, я согласен. См. Измененный код. – Yogesh