首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在WP7上使用MVVM时如何最好地将弹出窗口添加到可视化树

在WP7上使用MVVM时如何最好地将弹出窗口添加到可视化树
EN

Stack Overflow用户
提问于 2011-03-08 05:56:46
回答 3查看 1.5K关注 0票数 4

我在WP7上通过Caliburn Micro使用MVVM。我有一个从VM显示的弹出窗口。弹出窗口上有一个性能进度条。当IsIndeterminate设置为true时,进度条不会显示,因为popup不在可视化树中(它是一个自定义控件)。

如果我从视图模型中抓取视图并强制弹出到可视化树中,进度条将正确显示。不过,我真的不想这么做。

在保持视图和视图模型分离的同时,最好的方法是什么?有没有什么方法可以让弹出窗口插入到根页面或框架中?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-11 10:59:11

我最终创建了一个弹出式基类,并将此代码添加到:

代码语言:javascript
复制
private void HookIntoPage()
{
    if (UserControlHelper.RootVisual != null)
    {
        PhoneApplicationPage page = (PhoneApplicationPage)UserControlHelper.RootVisual.Content;

        // Hook up into the back key press event of the current page
        page.BackKeyPress += BackKeyPress;

        FrameworkElement element = page.FindVisualChild("MainGrid");

        if (element != null && element is Grid)
        {
            Grid grid = element as Grid;
            grid.Children.Add(this);
        }
        else
        {
            throw new Exception("Popup cannot find MainGrid");
        }
    }
}

这是一个有点硬编码,因为它寻找一个MainGrid网格控件。这可以进行改进,以寻找合适的顶级容器。

这里有两个辅助类在发挥作用。UserControlHelper有以下方法:

代码语言:javascript
复制
public static PhoneApplicationFrame RootVisual
{
    get
    {
        return Application.Current == null ? null : Application.Current.RootVisual as PhoneApplicationFrame;
    }
}

FindVisualChild来自Phone7.Fx.preview附带的一个VisualTreeHelperExtension类,我将其用于其可绑定的应用程序栏。

票数 0
EN

Stack Overflow用户

发布于 2011-03-08 06:04:28

我的方法是使用视图模型公开并绑定到控件的子视图模型/控制器/事件源。

控件可以监听源代码上的事件来完成它的工作,它被很好地分离,甚至是单元可测试的。

my Status Indicator Control就是一个很好的例子,视图模型使用Display和Clear等方法公开了一个StatusSource。控件本身绑定到源代码并侦听更改。从那里你可以做任何事情,包括创建弹出窗口并将其插入可视化树中。

票数 1
EN

Stack Overflow用户

发布于 2011-03-08 06:14:51

你是在和设计师一起工作吗?我发现在代码中做任何基于视图的事情,而不是加载数据,都会让他们感到困惑和/或沮丧。我建议创建两个视觉状态,一个显示弹出窗口,另一个隐藏,这样设计师就可以看到应用程序的样子,并可以切换(和样式)混合弹出窗口。然后,我使用DataStateBehavior或DataStateSwitchBehavior从我的虚拟机控制弹出窗口。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5225749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档