gpt4 book ai didi

silverlight - MVVM - 在 View 之间导航

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

我有一个绑定(bind)到 ViewModel 的 ListBox,它公开了 ObservableCollection 类型的参数。我已经设置了一个 ICommand,当 ListBox 中的一行被选中时会触发它。 (在 post 中使用方法 3 - 顺便说一句,效果很好)。

现在我的问题(与上述方法 3 或 ListBox 无关)是我的 ICommand 何时被触发并且我想要做的是导航到不同的页面(例如:详细信息页面),逻辑存储在哪里(或我该怎么做?)。

我问的原因是我不确定如何在 ViewModel 类中设置命令方法以使其保持可测试性。

ps:我正在使用 Prism,并且想知道它是否为导航提供了任何类/模式。

最佳答案

只是详细说明IEventAggregator的使用- 它为您提供了一个简单的 Pub/Sub 模型,用于在应用程序的解耦部分(即两者都不需要了解其他部分)之间发送任意消息。所以我们可以得到 IEventAggregator 的引用。在我们的 ViewModel 构造函数中(框架会自动为您解析),即:

private IEventAggregator eventAggregator;

public PublisherViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;

然后在我们的选择更改处理程序中,我们可以发布事件:
var changedEvt = eventAggregator.GetEvent<MyListboxChangedEvent>();
changedEvt.Publish(selectedItemId);

这依赖于我们的自定义事件类 MyListboxChangedEvent :
public class MyListboxChangedEvent : CompositePresentationEvent<int> {}

所以最后,在响应这个 Action 的 ViewModel 中,我们设置了对事件的订阅,以及对应的处理方法:
public SubscriberViewModel(IEventAggregator eventAggregator)
{
var changedEvt = eventAggregator.GetEvent<MyListboxChangedEvent>();
changedEvt.Subscribe(OnListBoxChanged, ThreadOption.UIThread);
}

public void OnListBoxChanged(int selectionId)
{
// do whatever we need
}

看起来像很多胶水,但它成为将 UI 的不同部分连接在一起的合乎逻辑的方法,并且很快成为第二天性。

关于silverlight - MVVM - 在 View 之间导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5523781/

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