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