MVVM架构中的WinRT /自定义模式对话框中的Dialog服务

时间:2013-11-28 11:48:15

标签: c# xaml mvvm windows-runtime

我的应用程序有一个简单的搜索屏幕。其中一个参数是“Radius”(与用户当前位置的距离)。半径选择器绑定到ViewModel上的“Radius”属性。

ViewModel正在侦听Radius属性的更改,当它发生更改时,如果用户之前没有选择过他们的位置,我想调用对话服务。

所以我希望应用程序使用MVVM Light的信使服务来监听来自ViewModel的消息,如果它收到消息“selectlocation”,它应该将“位置选择器”UI显示为模式对话框。

使用MessageDialog很容易。不知何故,它创建了它的UI并将其覆盖在屏幕上的任何内容之上。我该怎么做?但是有一个完全定制的模态对话框?

我可以创建一个usercontrol并在页面中托管,然后让页面监听消息然后显示用户控件,但是,我更喜欢它在全局级别。

在伪代码中,我希望有一个Dialog服务来执行此操作:

void SelectLocation(onSuccessCallback, onCancelCallback)
{
    Window.Current.ShowDialog(new LocationSelectorUserControl(onSuccessCallback, onCancelCallback));
{

与MessageDialog几乎相同,但具有自定义UI。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

抽象地说,要提供类似的东西,你必须创建一个空白窗口:

  • 中心本身在屏幕上
  • 声明自己最顶层
  • 禁用父窗口,直至关闭
  • 使用您想要获取的返回值实现特定的ShowDialog方法重载