Prism TabControl Region 에 대하여 질문드립니다.

안녕하세요. TreeView와 TabControl을 이용해서 UI를 구성하고 있습니다.
동작에 문제가 있어서 질문 드립니다. 조언 부탁드립니다.

TreeView 메뉴 클릭시 TabControl Item에 View가 없는 경우에는 잘 등록됩니다.
또 다른 메뉴를 클릭하여 새로운 View를 등록한 후 이전 메뉴를 클릭하여도 View가 이동되거나
활성화 되지가 않습니다. TabItem을 클릭하면 정상적으로 이동 됩니다.
OnMenuNavigate() 에서 view 개체를 가져오려고 해보았으니 Null 값이 나옵니다.
//object view = _regionManager.Regions[“MainTabRegion”].GetView(cmdParam);

도움을 부탁드립니다. 감사합니다.

[TabControlAdapter] 를 적용하였습니다.

internal class App : PrismApplication
{
    // ....
    protected override void ConfigureRegionAdapterMappings(RegionAdapterMappings regionAdapterMappings)
    {
        Console.WriteLine("ConfigureRegionAdapterMappings =====>");

        base.ConfigureRegionAdapterMappings(regionAdapterMappings);
        regionAdapterMappings.RegisterMapping(typeof(TabControl), Container.Resolve<TabControlRegionAdapter>());
    }
}

//......
internal class TabControlRegionAdapter : RegionAdapterBase<TabControl>
{
    public TabControlRegionAdapter(IRegionBehaviorFactory regionBehaviorFactory) : base(regionBehaviorFactory)
    {
    }

    protected override void Adapt(IRegion region, TabControl regionTarget)
    {
        region.Views.CollectionChanged += (s, e) => {
            if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
            {
                //FrameworkElement
                foreach (UserControl item in e.NewItems)
                {
                    if (item.DependencyObjectType.Name == "StartUp")
                        regionTarget.Items.Add(new TabItem { Header = item.DependencyObjectType.Name, Content = item, IsSelected = true });
                    else
                        regionTarget.Items.Add(new TabItem { Header = item.DependencyObjectType.Name, Content = item, IsSelected = true });

                }
            }
            else if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Remove)
            {
                foreach(UserControl item in e.OldItems)
                {
                    var tab = regionTarget.Items.OfType<TabItem>().FirstOrDefault(x => x.Content == item);
                    regionTarget.Items.Remove(tab);
                }
            }

        };
    }

    protected override IRegion CreateRegion()
    {
        return new SingleActiveRegion();
    }
}

MainViewModel

public MainWindowVM(IRegionManager regionManager, IEventAggregator eventAggregator)
{
    _regionManager = regionManager;
    _eventAggregator = eventAggregator;

    // Auto DP
    Title = "EasyClsuter Interface for EasySIM";

    _regionManager.RegisterViewWithRegion<StartUp>("MainTabRegion");
}

[RelayCommand]
private void OnMenuNavigate(string cmdParam)
{
    **//object view = _regionManager.Regions["MainTabRegion"].GetView(cmdParam);**

    switch(cmdParam) {
        case "StartUp":
        case "TestPage":
            _regionManager.RequestNavigate("MainTabRegion", cmdParam, naviParam);
            break;
        default: break;
    }
}
1개의 좋아요

기술관련된 질문은 카테고리를 충분히 찾아보시고 올려주시기를 부탁드립니다.

이번 것은 제가 옮겼습니다.

2개의 좋아요

아~ 감사합니다. 유의하도록 하겠습니다. 좋은 하루 되세요~^^

1개의 좋아요