C#/Prism

[C# - Prism] 프리즘 예제 23 - RegionMemberLifetime

반나무 2024. 5. 29. 21:15

안녕하세요, 반나무입니다.

이번 예제는 RegionMember(view)의 Lifetime을 살펴보는 예제입니다.

 

Region은 View를 다양하게 가질 수 있습니다.

IRegionMemberLifetime.KeepAlive를 통해 Region에서 View가 변경될 시

해당 View 인스턴스를 유지 할 지 말지 선택 할 수 있습니다.

  • KeepAlive = false : 인스턴스 Dispose
  • KeepAlive = true : 인스턴스 유지
public class ViewAViewModel : BindableBase, INavigationAware, IRegionMemberLifetime
{
    public ViewAViewModel() { }
    
    public bool KeepAlive { get => false; }
}

 

다만, 확인해보니 해당 기능을 사용하고자 하면 인터페이스뿐만아니라.

regionManager를 담당하고 있는 Class에서 Region, View의 CollectionChanged Event를 받아 직접 처리를 해야합니다.

// Region Collection Changed 이벤트 구독
public MainWindowViewModel(IRegionManager regionManager)
{
    _regionManager = regionManager;
    _regionManager.Regions.CollectionChanged += Regions_CollectionChanged;
}

// Region Collection Changed시 Views.CollectionChanged 이벤트 구독
private void Regions_CollectionChanged(ojbect sender, NotifyCollectionChangedEventArgs e)
{
    if(e.Action == NotifyCollectionChangedAction.Add)
    {
    	var region = (IRegion)e.NewItems[0];
        region.Views.CollectionChanged += Views_CollectionChanged;
    }
}

// View Collection Changed시 메소드 실행
private void View_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    if(e.Action == NotifyCollectionChangedAction.Add)
    {
    	Views.Add(e.NewItems[0].GetType().Name;
    }
    else if(e.Action == NotifyCollectionChangedAction.Remove)
    {
    	Views.Remove(e.OldItems[0].GetType().Name);
    }
}

 

 

View인스턴스를 유지하고싶지 않다면 해당 인터페이스를 사용해보는것도 좋아 보입니다.

 

반응형