|
|
1
5
不幸的是,我无法再现你的具体问题。我在MainWindowView Loaded事件处理程序中启动了一个单独的线程;一个什么也不做,只持续发送特定消息的线程。然后,我在我的SecondWindowView上调用了ShowDialog(),它的视图模型已注册为侦听此特定消息。第二个窗口的视图模型中的消息处理程序重复执行。事实上,处理程序甚至在调用ShowDailog()之前就已经被调用了,因为我的视图模型已经由ViewModelLocator在应用程序启动时创建了。我需要看到更多的代码来更好地了解您的情况(即,您的服务正在创建详细信息窗口,或者我可以编译以重现问题)。 您可以尝试以下方法,而不是针对您的孩子窗口。在应用程序中的某个位置定义以下类:
现在创建以下ChildWindowVM类,并以初始化MainWindowVM的方式在ViewModelLocator中对其进行初始化:
Refresh()方法将在DetailsViewModel类中定义,并负责在显示窗口之前执行的任何初始化。请注意,当设置CurrentContent属性时,会向MainWindowView发出一条消息,以创建一个ChildWindowView实例来显示您的内容。 MainWindowView代码如下所示:
最后一步是将CurrentContent属性从ChildWindowVM类绑定到ChildWindowView类。这是在您的ChildWindowView的xaml中完成的:
现在,只需调用
您可以通过调用以编程方式关闭窗口
您还可以从MessageBase派生任意数量的类,并在ChildWindowVM类中注册它们。在每个消息处理程序中,只需将CurrentContent属性设置为适当的视图模型,就可以指定要显示的内容。 实际上还有一件事。如果您确实希望在子窗口中看到任何有用的内容,则需要指定视图和视图模型之间的模板绑定。这可以通过应用程序资源中的xaml来完成:
不要忘记定义名称空间(即“视图模型”和“视图”)。 |
|
|
maverickar · 模式未通过按钮关闭 2 年前 |
|
|
Community wiki · 如何从c打开对话框(模态)# 3 年前 |
|
|
Simon · 如何在反应原生模态上设置borderRadius? 6 年前 |
|
|
user2707039 · 带远程Modal的Bootstrap 3 13 年前 |