【发布时间】:2020-04-17 12:51:57
【问题描述】:
我是 Caliburn Micro 框架的新手,正在开发一个具有列表视图的应用程序,您可以双击一个项目以进入详细视图。
这一切都很好,我目前正在通过发送 ChangePage 消息进行前向导航,SHellView 会接收这些消息并为新页面发出 ActivateItem 命令。
我无法完全弄清楚的是如何导航回页面并保持它在您离开时的状态?我已经阅读了有关 Conductor 集合的信息,但不太确定它在实践中是如何工作的?
是否有人举例说明他们使用 eventAggregator 发送 ChangePage 消息,并由 ShellView 通过检查该页面是否已存在,如果不存在则创建一个新页面来处理?
谢谢!
更新:
我的更改页面消息如下所示:
public class ChangePageMessage
{
public readonly Type _viewModelType;
public ChangePageMessage(Type viewModelType)
{
_viewModelType = viewModelType;
}
}
而我在 ShellView 中对消息的处理是:
public void Handle(ChangePageMessage message)
{
if (message._viewModelType == typeof(SearchResultsViewModel))
{
ActivateItem(new SearchResultsViewModel(_eventAggregator));
}
else if(message._viewModelType == typeof(DetailedDocumentViewModel))
{
ActivateItem(new DetailedDocumentViewModel(_eventAggregator));
}
else
{
//here
}
}
【问题讨论】:
-
例如,您可以将访问过的视图模型存储在
ShellViewModel的List<T>字段中,并在收到@987654326 时检查此列表中是否已存在T类型的实例@ 事件。如果存在,则返回该实例。如果没有,则创建一个新实例,将其添加到列表中,然后返回此实例。您的事件类型是如何定义的? -
感谢您的建议!这是有道理的,我也更新了原始问题,以回应您关于如何定义我的事件的问题。
标签: wpf caliburn.micro