在ModalDialog中使用ViewModel中的数据,即使它位于Shell中



我正在编写一个UWP并使用模板10。

我创建了一个ModalDialog,它应该向用户显示一些刚刚在ViewModel中计算的数据。

这是我迷失的地方:

#1,ModalDialog需要来自我的ViewModel的数据#2,ModalDialog需要根据用户单击的按钮在ViewModel上调用1+方法

My Shell.xaml.cs:

public sealed partial class Shell : Page
{
public static Shell Instance { get; set; }
public static HamburgerMenu HamburgerMenu => Instance.MyHamburgerMenu;

public Shell()
{
Instance = this;
InitializeComponent();
if (App.MobileService.CurrentUser == null)
LoginModal.IsModal = true;
}
public Shell(INavigationService navigationService) : this()
{
SetNavigationService(navigationService);
}
public void SetNavigationService(INavigationService navigationService)
{
MyHamburgerMenu.NavigationService = navigationService;
}
#region Login
private void LoginLoggedIn(object sender, EventArgs e)
{
MyHamburgerMenu.NavigationService.Navigate(typeof(Views.MainPage));
LoginModal.IsModal = false;
}
#endregion
}

}

Shell.xaml

<Controls:ModalDialog x:Name="ScoreModal" Grid.RowSpan="3"
CanBackButtonDismiss="False"
DisableBackButtonWhenModal="True">
<Controls:ModalDialog.ModalContent>
<myControls:QuizScorePart
HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
</Controls:ModalDialog.ModalContent>
</Controls:ModalDialog>

我尝试过的:

我试着把ModalDialog的控件放在使用我想与之对话的ViewwModel的视图中,但这不起作用;该视图位于shell中,这意味着ModalDialog下面的所有内容都没有被禁用。据我所知,它一定在外壳里。

我尝试在Shell.xaml.cs文件中设置一个方法,将对话框的IsModal设置为true/false;这是有效的,但它并不能解决我与ViewModel交互的问题。

我迷路了。感谢任何人的帮助。

参考Search示例,在实际部分中有要处理的委托,请查看LoginPart的代码绑定。。。。

我在下面的评论中指定的是我如何使用LoginPage而不是用户控件进行操作。它有一个LoginPageViewModel,而LoginPageView Model又引用了一个SettingsService实例。

编辑

这样想吧。。。ScoreMode只是另一个视图控件。QuizScorePart是您的视图,我假设QuizScorePartViewModal存在。从那时起,它就变成了视图模型之间的消息传递练习。至少这是我在最后一条评论之后看到的。你需要知道用户点击了什么按钮。假设上述情况属实,那么QuizViewModel将对它正在侦听的消息做出反应。外壳只是一个完整屏幕盖的固定位置,因为它只对IsModal做出反应。如果这是一个问题,请考虑让服务按住按钮选择,类似于设置服务的工作方式。没有任何迹象表明QuizScorePart的数据上下文不能设置为QuizViewModel的数据上下文,但这可能是一个测试问题。

最新更新