MVVM中的子窗口

时间:2012-06-05 09:18:40

标签: wpf mvvm-light

如何在WPF应用程序中使用MVVM Light中的Messaging来显示ChildWindow并从中返回一些值? 我需要的是向用户呈现带有2个日期选择器的模态对话框以及以某种方式返回theese 2值以用作其他视图的参数的消息。 有可能吗?

1 个答案:

答案 0 :(得分:0)

通常我只是使用Popup来做这样的事情。

Popup的{​​{1}}通常与Visibility中的IsPopupVisible属性绑定,而弹出ViewModel通常也是DataContext的一部分视图模型

我不是WPF默认Popup控件的忠实粉丝,所以如果您有兴趣,我有自己的自定义Popup控件here

它通常像这样使用:

<local:PopupPanel Content="{Binding PopupContent}"
    local:PopupPanel.PopupParent="{Binding ElementName=ParentPanel}"
    local:PopupPanel.IsPopupVisible="{Binding IsPopupVisible}" />

我从ViewModel这样显示:

PopupContent = new SelectDatesViewModel();
IsPopupVisible = true;

触发SelectDatesViewModel.SaveCommand后,您可以将包含所选日期的消息发送到ViewModels感兴趣的内容:

Messenger.Default.Send(new DatesChangedMessage(this.Date1, this.Date2))

实际的弹出内容既可以在XAML中定义,也可以在隐式DataTemplate中定义

<DataTemplate DataType="{x:Type local:SelectDatesViewModel}">
    <local:SelectDatesView />
</DataTemplate>