안녕 얘들 아,
프리젠 테이션을 구현하기 위해 프리즘 4를 사용하고 있습니다. 것은 지역을 포함하는보기를 사용하고 있습니다. 이제는 같은보기 아래 다른보기로 이동하려고합니다. 범위 그래서보기에서 KeepAlive 속성을 false로 설정하여 탐색에서보기가 영역에서 제거되고 새보기가 나타나지만 지역 이름이 이미 예외로 유지되도록합니다. 당신은 탐색 범위가 지정된 RegionManager를 사용하려면처럼이 지역을 포함 동일한 뷰의 몇 가지 인스턴스를 탐색 할 수있는 방법
그것은 소리
, 둘다조회 탐색 프리즘
1
A
답변
0
감사합니다 (단 하나의 시간에 메모리에 있어야합니다). 같은 RegionManager에 같은 이름의 region이 두 개 이상 있기 때문에 지역 이름이 표시되는 이유는 이미 존재합니다.
기본적으로 PRISM은 탐색 기능이있는 범위가 지정된 RegionManager를 지원하지 않지만 사용자 정의 RegionBehaviors를 사용하면이 기능을 추가하기가 쉽습니다. 기본적으로 인터페이스를 만든 다음보기 또는보기 모델에서 해당 인터페이스를 구현해야합니다. 그런 다음 해당 인터페이스를 찾는 RegionBehavior를 만들고 요구 사항을 충족하는 경우 해당보기에 대한 새 RegionManager 인스턴스를 만듭니다.
여기에 인터페이스가 같이 할 수있는 작업은 다음과 같습니다
public interface IRegionScopeAware
{
bool IsRegionManagerScoped { get; }
}
그리고 여기 RegionBehavior의 모습은 다음과 같습니다
public class RegionScopeAwareBehavior : RegionBehavior
{
#region Overrides of RegionBehavior
protected override void OnAttach()
{
Region.Views.CollectionChanged += ViewsOnCollectionChanged;
ApplyScopedRegionManager(Region.Views.OfType<FrameworkElement>());
}
#endregion
private static void ViewsOnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if (e.NewItems == null || e.Action != NotifyCollectionChangedAction.Add) return;
ApplyScopedRegionManager(e.NewItems.OfType<DependencyObject>());
}
private static void ApplyScopedRegionManager(IEnumerable<DependencyObject> views)
{
if (views == null) return;
foreach (var view in views)
{
ApplyScopedRegionManager(view);
}
}
private static void ApplyScopedRegionManager(DependencyObject view)
{
if (view == null) return;
IRegionScopeAware scopeAware = view as IRegionScopeAware;
if (scopeAware == null && view is FrameworkElement)
scopeAware = ((FrameworkElement) view).DataContext as IRegionScopeAware;
if (scopeAware != null)
ApplyScopedRegionManager(scopeAware, view);
}
private static void ApplyScopedRegionManager(IRegionScopeAware scopeAware, DependencyObject view)
{
if (view == null) return;
if (scopeAware == null) return;
if (scopeAware.IsRegionManagerScoped)
RegionManager.SetRegionManager(view, new RegionManager());
}
}
그리고 당신은 당신의 RegionBehavior를 등록해야한다는 점 잊지 마세요. 부트 스트 래퍼에 기본 RegionBehavior로 등록하는 것이 좋습니다.
protected override IRegionBehaviorFactory ConfigureDefaultRegionBehaviors()
{
IRegionBehaviorFactory factory = base.ConfigureDefaultRegionBehaviors();
factory.AddIfMissing(typeof(RegionScopeAwareBehavior).Name, typeof(RegionScopeAwareBehavior));
return factory;
}
관련 문제
- 1. 프리즘 - 프리즘 영역 관리자를 사용해야합니까?
- 2. 프리즘 ASP.NET
- 3. 프리즘 CompositeEvent는
- 4. 프리즘 새로운보기
- 5. 빈 조회 테이블 대 일치하지 않는 조회 테이블 (조회 변환)
- 6. Silverlight 액션 및 프리즘
- 7. 프리즘 : 예외 처리?
- 8. MEF와 프리즘 통합
- 9. 프리즘 scultpure 실버 라이트
- 10. StructureMap을 사용하여 프리즘 구성
- 11. 델파이 프리즘 (.NET) 컴파일러
- 12. 캘리브레이션 및 프리즘 샘플
- 13. wpf 프리즘 복합 명령
- 14. 프리즘 모듈 - 왜 필요합니까?
- 15. WPF 프리즘 어셈블리 StrongNaming
- 16. 프리즘 ModuleDependency ModularityException
- 17. 프리즘 : 번들이 작동하지 않습니다.
- 18. 질문에 대한 프리즘 4
- 19. Silverlight 프리즘 + MDI 창
- 20. 프리즘 v4, MEF 서비스
- 21. 프리즘 및 애니메이션 TabControl
- 22. 프리즘 및 순환 의존도
- 23. WPF 프리즘 ViewModel 업데이트
- 24. 프리즘 및 지역
- 25. 프리즘 DAL 언제/어디에 액세스 할 것인가
- 26. 배열 색인 조회 대 인스턴스 필드 조회
- 27. 프리즘 : 한 지역의 컨트롤을 쌓아 놓으시겠습니까?
- 28. 북마크 조회
- 29. ViewGroup의 조회
- 30. 시간대 조회
같은 문제가 있습니다. 네비게이션의 예에서 이것이 나타나지 않는 것으로 보입니다. –