gpt4 book ai didi

silverlight - 如何在不成为页面的情况下获得 NavigationService?

转载 作者:行者123 更新时间:2023-12-03 10:15:29 27 4
gpt4 key购买 nike

这似乎是一个非常幼稚的问题,但究竟如何从页面外部获取 NavigationService,例如可能是 View 模型?每个人都说导航应该出现在 View 中,但我一直在想,这不是一个网页,它是一个应用程序。 View 模型和业务逻辑应该控制应用程序流,而不是 View 。这真的很幼稚吗?

最佳答案

据我了解,涉及到View的操作,即UI,应该由View独占。使用 MVVM 时,UI 不应直接由 ViewModel 或 BusinessLogic 控制(因为它们不应该知道有关 View 的具体实现的任何信息),而应使用消息。

这意味着,如果我们想从 ViewModel 打开一个编辑器窗口,我们从 ViewModel 发送一条消息,我们要打开它并在 View 中接收它并在那里打开窗口。这同样适用于浏览不同页面,您将在 MainPage 中接收消息(或任何包含您想要浏览的页面)并处理那里的所有内容。

另一种方法是使用 DialogService 或类似的东西,它在中央位置处理打开的窗口。但是,由于 NavigationService 是 Page 类的一个属性,我们需要处理 Page 中的消息。

示例代码,使用 MVVM Light Toolkit :(未测试,部分取自 Shawn Wildermuth 的 RiaXBoxGames example):

ViewModel(例如,将其放在按钮的命令中):

Messenger.Default.Send<bool>(true, "GoToNextPage");

查看(例如,将其放入构造函数中):
Messenger.Default.Register<bool>(this, "GoToNextPage", ignore =>
{
// your code to go to next page
});

关于silverlight - 如何在不成为页面的情况下获得 NavigationService?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5145958/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com