[WPF] Prism ViewModelBase 정의Frontend/WPF2022. 9. 25. 21:37
Table of Contents
반응형
WPF에서 Prism을 사용하여 ViewModel을 구현할 때 필요에 따라 Container
, EventAggregator
, RegionManager
, Logger
등의 서비스를 사용합니다.
서비스를 각각 ViewModel 에 정의해서 사용하는 것이 아닌 공통으로 작성하여 편리하게 사용할 수 있는 추상 클래스를 작성하였습니다.
ViewModelBase Class
using Prism.Events;
using Prism.Logging;
using Prism.Ioc;
using Prism.Mvvm;
using Unity;
namespace Prism.Project.Common.Mvvm
{
public abstract class ViewModelBase : BindableBase
{
private string title;
public string Title
{
get => title;
set => SetProperty(ref title, value);
}
protected IUnityContainer Container { get; }
private IEventAggregator eventAggregator;
/// <summary>
/// The EventAggregator
/// </summary>
public IEventAggregator EventAggregator
{
get { return eventAggregator; }
private set { this.SetProperty<IEventAggregator>(ref this.eventAggregator, value); }
}
private IRegionManager regionManager;
/// <summary>
/// The region manager
/// </summary>
public IRegionManager RegionManager
{
get { return regionManager; }
private set { this.SetProperty<IRegionManager>(ref this.regionManager, value); }
}
protected ILoggerFacade Logger { get; }
protected ViewModelBase(IUnityContainer container)
{
Container = container;
RegionManager = container.Resolve<IRegionManager>();
EventAggregator = container.Resolve<IEventAggregator>();
Logger = container.Resolve<ILoggerFacade>();
}
}
}
사용 코드
ViewModelBase
클래스를 상속받고 생성자에 container
를 정의합니다.
using Prism.Project.Common.Mvvm;
using Unity;
using Prism.Events;
namespace Prism.Project.ViewModels
{
public class MainWindowViewModel : ViewModelBase
{
public MainWindowViewModel(IUnityContainer container) : base(container)
{
Title = "Prism 테스트";
Logger.Log("[MainWindowViewModel Created]", Category.Debug, Priority.None);
// Event 예제 코드
EventAggregator.GetEvent<MainWindowClosedEvent>().Subscribe(MainWindowClosed);
}
/// <summary>
/// MainWindow 화면 종료 시
/// </summary>
private void MainWindowClosed()
{
}
}
}
반응형
'Frontend > WPF' 카테고리의 다른 글
[WPF] 이미지 불러오기 (0) | 2022.10.03 |
---|---|
[Devexpress] GridControl 자동 번호 매기기 (0) | 2022.10.03 |
[WPF] Slider Custom Style (0) | 2022.09.25 |
[WPF] Event Notifier 사용 방법 (0) | 2022.09.15 |
[WPF] Prism Library 사용 방법 (0) | 2022.08.28 |
@고지니어스 :: 규니의 개발 블로그
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!