【问题标题】:Changing Region Views in Silverlight using Prism使用 Prism 在 Silverlight 中更改区域视图
【发布时间】:2011-01-13 17:22:15
【问题描述】:

我一直在学习 Prism 和 Silverlight,现在正在尝试创建一个简单的应用程序,但遇到了障碍......

我拥有的是一个带有 2 个 ContentControls、“MenuRegion”和“ContentRegion”的 Shell。我希望它工作的方式是用户将单击“MenuRegion”中的一个项目,然后适当的视图将显示在 ContentRegion 中,替换以前存在的任何视图(所有视图都在他们自己的项目中,好像由不同的人工作)。内容区域中显示的所有视图都将不同。

我不知道如何使用 Prism 模型来实现这一点(如果我愿意,我可以做到这一点,但 View.cs 中会有很多代码,并且希望以正确的方式做到这一点)。我在那里找到的所有示例都使用 Tab 控件并一次加载所有模块,这不是我想要实现的。是否有我应该学习的特定模式或您知道的任何示例可以为我指明正确的方向?

【问题讨论】:

    标签: c# silverlight mvvm prism


    【解决方案1】:

    试试这个。

    使用 RegionManager 向您的区域添加视图:

    regionManager.AddToRegion("ContentRegion", new MyViews.View1());
    

    然后,当您想要替换该视图时,您可以删除该视图:

    regionManager.Regions["ContentRegion"].Remove(view);
    

    或者循环浏览该区域中的视图并将它们全部删除:

        foreach (var view in regionManager.Regions["ContentRegion"].Views)
        {
            regionManager.Regions["ContentRegion"].Remove(view);
        }
    

    您的视图模型将是放置此类代码的好地方。使用 Unity 在您的视图模型构造函数中注入区域管理器。

    【讨论】:

    • 我不确定最后一个选项是否有效,因为这会在循环遍历枚举时改变枚举。
    • 这是一个很好的观点。 Prism 怎么能做到这一点?将视图复制到您自己的集合中,然后枚举它?
    • 我认为您不能在向区域注册视图后不删除视图,而是在区域内激活或停用视图,或者添加具有名称的视图 (view.Name = "View")然后是 RegionManager.Regions["Region"].Remove(RegionManager.Regions["Region"].GetView("View"))
    猜你喜欢
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2011-01-02
    • 2010-12-04
    • 1970-01-01
    相关资源
    最近更新 更多