Raj*_*Rao 1 silverlight prism mvvm
我有一个ListBox绑定到ViewModel,它暴露ObservableCollection类型的参数.我已经设置了一个ICommand,当选择ListBox中的一行时,它会被触发.(在这篇文章中使用方法3 - 顺便说一句,它很有用).
现在我的问题(与上述方法3或ListBox无关)是我的ICommand被触发时我要做的是导航到另一个页面(例如:详细信息页面),其中存储的是逻辑(或者我该怎么做?).
我问的原因是我不确定如何在ViewModel类中设置命令方法,使其保持可测试性.
ps:我正在使用Prism,并且还想知道它是否为Navigation提供任何类/模式.
只是详细说明它的使用IEventAggregator- 它为您提供了一个简单的Pub/Sub模型,用于在解耦(即既不需要了解其他任何部分)应用程序之间发送任意消息.所以我们可以IEventAggregator在我们的ViewModel构造函数中获得引用(这是由框架自动解决的),即:
private IEventAggregator eventAggregator;
public PublisherViewModel(IEventAggregator eventAggregator)
{
this.eventAggregator = eventAggregator;
Run Code Online (Sandbox Code Playgroud)
然后在我们的选择更改处理程序中,我们可以发布事件:
var changedEvt = eventAggregator.GetEvent<MyListboxChangedEvent>();
changedEvt.Publish(selectedItemId);
Run Code Online (Sandbox Code Playgroud)
这取决于我们的自定义事件类MyListboxChangedEvent:
public class MyListboxChangedEvent : CompositePresentationEvent<int> {}
Run Code Online (Sandbox Code Playgroud)
最后,在响应此操作的ViewModel中,我们设置了对事件的订阅,以及相应的处理程序方法:
public SubscriberViewModel(IEventAggregator eventAggregator)
{
var changedEvt = eventAggregator.GetEvent<MyListboxChangedEvent>();
changedEvt.Subscribe(OnListBoxChanged, ThreadOption.UIThread);
}
public void OnListBoxChanged(int selectionId)
{
// do whatever we need
}
Run Code Online (Sandbox Code Playgroud)
看起来像很多胶水,但它成为将UI的不同部分连接在一起的合理方法,并且它很快成为第二天性.
| 归档时间: |
|
| 查看次数: |
482 次 |
| 最近记录: |