1

BandClient 上的 addtileasync 方法会打开一个模式对话框,询问是否允许在 Microsoft Band 上安装磁贴。但是在像 Template10 这样的 mvvm 应用程序中,不会显示对话框,也不会添加磁贴。给定 mvvm 实现,如何实现此方法?

4

1 回答 1

0

我遇到了同样的问题……我使用的是没有 Template10 的 Caliburn Micro,但我相信整体架构是相似的。尽我所能确定,该弹出窗口是通过假设 Window.Current 是它尝试抓取的 Frame 来实现的,导航到 auth 对话框,然后在用户批准后导航回来。我尝试了几种方法,目前对我有用的一种方法(尽管我对此并不感到兴奋)是注入您上面提到的 Frame 。但是,在这样做之前,我将 ShellView 复制到 App 上的公共属性中,以便在添加磁贴后可以返回到它。我的代码看起来基本上是这样的:

当我需要添加瓷砖时(在设置视图上):

        ((App)Application.Current).ShellHolder = Window.Current.Content;

        Frame rootFrame = Window.Current.Content as Frame;
        if (rootFrame == null)
        {
            rootFrame = new Frame();
            Window.Current.Content = rootFrame;
        }

        rootFrame.Navigate(typeof(BandAddTileView));
        Window.Current.Activate();

然后,在 BandTileView 中,当它的逻辑被包装起来时,我会这样称呼:

    private void ResetShell(BandTileResult result) {
        var app = (App)Application.Current;
        if (app == null) return;

        app.TileResult = result;

        Window.Current.Content = (UIElement)app.ShellHolder;
        Window.Current.Activate();
    }

然后,当 ShellView 重新开始运行时,我有一些逻辑可以导航回设置视图并处理 BandTileResult。

就像我说的那样,它是一个杂项,并不完全优雅,但它似乎工作正常,并且在 BandAddTileView 上进行了一些样式设置,它为应用程序用户提供了非常好的用户体验。

对于更好的 MVVM 方法,绝对欢迎来自乐队开发团队的任何反馈!

于 2015-11-15T04:24:39.640 回答