[C# WPF] MainWindow GetInstance

우롱밀크티당도70·2023년 9월 13일
0

WPF

목록 보기
8/22
post-custom-banner

1. 배경

앞서
https://velog.io/@yu_oolong/C-WPF-Button을-눌러-Frame에-Page-띄우기-1
https://velog.io/@yu_oolong/C-WPF-Button을-눌러-Frame에-Page-띄우기-2
에서 MainWindow를 싱글톤 패턴으로 작성하기


2. 개발환경

  • VisualStudio 2022

3. 내용

.
.
.
private void SelectMenu1()
        {
            ResetAllMenus();
            IsMenu1Selected = true;

            MainWindow mainWindow = MainWindow.GetInstance();
            if (mainWindow != null)
            {
                mainWindow.Content.Source = new Uri("Page1.xaml", UriKind.Relative);
            }
        }
  • 메뉴 바 Page의 ViewModel 클래스 파일에서 Command를 작성할 때 MainWindow에 배치한 Frame에 접근하여 Source 속성을 변경하기 위해
    먼저 MainWindow mainWindow = MainWindow.GetInstance(); 라는 코드를 작성했다.
	public partial class MainWindow : Window
    {
        private static MainWindow _Instance = null;
        public MainWindowModel MainWM { get; } = new MainWindowModel();
        public int _LoginIdx;

        public static MainWindow GetInstance()
        {
            if (_Instance == null || !_Instance.IsLoaded)
            {
                _Instance = new MainWindow();
            }
            return _Instance;
        }

        public MainWindow()
        {
            InitializeComponent();

            var viewModel = new MainWindowModel();
            DataContext = viewModel;
        }
  • GetInstance()는 MainWindow가 필요할 때마다 인스턴스를 생성하는게 아닌 이미 만들어진 인스턴스를 가져다 쓰기 위한 싱글톤 패턴으로 작성된 메소드이다.

  • InitializeComponent();는 해당 Window 또는 Page에 배치한 UI Control들을 생성하는 역할을 한다.


Microsoft의 InitializeComponent()에 대한 설명 링크
InitializeComponent(); 는 구성 요소의 컴파일된 페이지를 로드하는 메소드라고 한다.

profile
안뇽하세용
post-custom-banner

0개의 댓글