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인스턴스를 유지하고싶지 않다면 해당 인터페이스를 사용해보는것도 좋아 보입니다.
반응형