티스토리 뷰

반응형

질문으로 올려주신 내용을 간단하게 예제로 만들었습니다.

 

처음 시작

다른 화면으로 이동 했다가 다시 돌아오기를 여러번 수행한 후에는 아래와 같은 결과가 나옵니다.

1. 뷰모델 싱글톤으로 등록

App.xaml.cs에서 아래와 같은 방법으로 컨테이너에 싱글톤으로 등록할 수 있습니다.

처음에 Resolve를 하면 하나의 인스턴스가 생성되고, 그 이후에는 계속 동일한 인스턴스를 반환 합니다.

        /// <summary>
        /// Configures the services for the application.
        /// </summary>
        private static IServiceProvider ConfigureServices()
        {
            var services = new ServiceCollection();

            //ViewModel 등록
            services.AddTransient(typeof(MainViewModel));
            services.AddTransient(typeof(CustomerViewModel));
            //싱글톤 등록
            services.AddSingleton(typeof(HomeViewModel));

            return services.BuildServiceProvider();
        }

2. HomeViewModel. 수정 사항

  • 뷰모델 자체가 싱글톤으로 등록되어서 값이 계속 유지 되기 때문에, 기존에 static Count 프로퍼티를 일반 프로퍼티로 변경합니다.
  • 화면에 ListBox에 데이터 출력을 위한 SampleTexts 프로퍼티를 추가했습니다.
  • OnNavigated는 Forward, Backward 두가지 경우 모두 실행되는 것에 주의해야합니다.
  • Xaml에 수정 사항은 별도로 설명드리지 않겠습니다.
using System.Collections.Generic;
using System.Collections.ObjectModel;
using WpfFramework.Bases;

namespace WpfFramework.ViewModels
{
    public class HomeViewModel : ViewModelBase
    {
        /// <summary>
        /// 카운트 - 뷰모델을 싱글톤으로 사용하기 때문에 static 제거 
        /// </summary>
        public int Count { get; set; }

        private IList<string> _sampleTexts;
        /// <summary>
        /// 셈플 텍스트
        /// </summary>
        public IList<string> SampleTexts
        {
            get => _sampleTexts;
            set => SetProperty(ref _sampleTexts, value);
        }

        public HomeViewModel()
        {
            Title = "Home";
        }
        /// <summary>
        /// 네비게이트 완료 - 네이게이트가 완료될 때 호출(백으로 돌아올 때도 호출됨)
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="navigatedEventArgs"></param>
        public override void OnNavigated(object sender, object navigatedEventArgs)
        {
            Count++;
            Message = $"{Count} Navigated";

            if (SampleTexts == null)
            {
                //처음에 생성
                SampleTexts = new ObservableCollection<string>
                {
                    "kaki104",
                };
            }
            else
            {
                //그 다음부터는 메시지 추가
                SampleTexts.Add(Message);
            }
        }
    }
}

3. 소스

kaki104/WpfFramework at part2-1/back-navigation-back (github.com)

 

GitHub - kaki104/WpfFramework

Contribute to kaki104/WpfFramework development by creating an account on GitHub.

github.com

 

반응형

'WPF .NET' 카테고리의 다른 글

CommunityToolkit.Mvvm - LayerPopup 빈 공간 클릭으로 닫기  (4) 2024.01.29
Kiosk 만들기 - Part9  (0) 2023.11.07
Kiosk 만들기 - Part8  (2) 2023.11.01
Kiosk 만들기 - Part7  (0) 2023.10.30
Kiosk 만들기 - Part6  (0) 2023.10.27
댓글