안녕하세요. 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;
}
}