Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何激活区域的下一个或最后一个视图?_C#_Wpf_Module_Prism_Region - Fatal编程技术网

C# 如何激活区域的下一个或最后一个视图?

C# 如何激活区域的下一个或最后一个视图?,c#,wpf,module,prism,region,C#,Wpf,Module,Prism,Region,在我的应用程序中,我使用的是Prism,它通过discovery(Unity)加载了三个模块 当模块加载时,它们在“TopLeftRegion”区域中注册每个视图 我正在尝试对模块视图执行导航。我的意思是,在之前和之后创建方法,在这些方法中可以激活(或[“TopLeftRegion”])。激活(…))该区域中的当前视图 例如,假设我有: |_ModuleA | |_ModuleB | |_ModuleC 如果我的当前视图是ModuleA,如果我按Next,则必须显示ModuleB,如果我按Be

在我的应用程序中,我使用的是Prism,它通过discovery(Unity)加载了三个模块

当模块加载时,它们在“TopLeftRegion”区域中注册每个视图

我正在尝试对模块视图执行导航。我的意思是,在
之前和
之后创建
方法,在这些方法中可以激活(或
[“TopLeftRegion”])。激活(…)
)该区域中的当前视图

例如,假设我有:

|_ModuleA
|
|_ModuleB
|
|_ModuleC
如果我的当前视图是
ModuleA
,如果我按
Next
,则必须显示
ModuleB
,如果我按
Before
则必须在该区域显示
ModuleA

我当时在看房子:

regionManager.Regions["TopLeftRegion"].Views
但我不知道该怎么做。属性
视图
不允许访问数据并移动到其中

这是一个简单的项目,我试图在ShellViewModel中创建该方法,但我不明白。如何导航每个模块


Prism不假设一个区域中只有一个活动视图,因此region类上没有任何属性使其超级简单。但这并不太棘手

RegionManager类跟踪ActiveViews属性中活动的视图。它不会跟踪哪个视图处于活动状态。在您的情况下,您的区域仅支持一个活动视图,因此您只能在该集合中找到第一个视图

另一个棘手的部分是在Region.Views集合中查找活动视图。下面我将Region.Views转换为一个列表,这样我就可以使用FindIndex来定位该活动视图的索引

    private void Next(object commandArg)
    {
        IRegion myRegion = _regionManager.Regions["TopLeftRegion"];
        object activeView = myRegion.ActiveViews.FirstOrDefault();  //Here we're trusting that nobody changed the region to support more than one active view
        List<object> myList = myRegion.Views.ToList<object>();      //Cast the list of views into a List<object> so we can access views by index

        int currentIndex =  myList.FindIndex(theView => theView == activeView);
        int nextIndex = (currentIndex + 1) % (myList.Count);        //Wrap back to the first view if we're at the last view
        object nextView = myList[nextIndex];
        myRegion.Activate(nextView);  
    }
private void Next(对象命令arg)
{
IRegion myRegion=_regionManager.Regions[“TopLeftRegion”];
object activeView=myRegion.activeView.FirstOrDefault();//这里我们相信没有人更改区域以支持多个活动视图
List myList=myRegion.Views.ToList();//将视图列表强制转换为一个列表,以便我们可以按索引访问视图
int currentIndex=myList.FindIndex(theView=>theView==activeView);
int nextIndex=(currentIndex+1)%(myList.Count);//如果我们在最后一个视图,则返回到第一个视图
对象nextView=myList[nextIndex];
myRegion.Activate(nextView);
}

导航到上一个视图基本相同,只是从索引中减去一个,而不是添加一个

你试过了吗?