silverlight - MVVM Light、Windows Phone、View & ViewModel 在页面之间导航

标签 silverlight windows-phone-7 mvvm

我有一个页面,您基本上可以在其中选择一组选项(配置),然后转到下一页,您可以在其中做一些事情
使用 MVVM Light 工具包,我有一个绑定(bind)到第一页 View 的 View 模型。当用户点击一个按钮时,它会重定向到另一个 View ,这将是第二页
IE。:

Page2Command = new DelegateCommand((obj) => 
    Messenger.Default.Send<Uri>(new Uri("/DoStuffView.xaml", UriKind.Relative), 
                                Common.CommonResources.GoToDoStuffRequest)) });

问题是,第二个 View 的 View 模型(我看到它的方式)在构造函数中有几个参数,它们基本上是第一页上设置的配置的依赖项。

IE。 :
public DoStuffViewModel(ICollection<Note> availableNotes, SoundMappers soundType)
{
}

问题出在这里..如何使用用户在第一页上动态选择的数据实例化 View 模型?
我不能使用 MVVM light 提供的 ViewModelLocator 模式,因为这些 View 模型没有任何依赖关系,它们只是它们自己(或者它们可以从数据库、文件或其他任何东西中检索数据,但它们没有任何动态输入数据)。我可以通过 View 的构造函数来实现,在那里实例化 View 模型,并将新创建的 View 模型分配给 View 的 DataSource,但我认为这样做不太好。
建议?

最佳答案

正如我所见,您使用 Messenger 类发送消息,因此您熟悉 MVVM light 中的消息传递。您必须定义自己的消息类型,该类型应接受第 1 页中的参数:

    public class Page2ViewModelCreateMessage : MessageBase
{
    public ICollection<Note> AvailableNotes{get;set;}
    public SoundMappers SoundType{get;set;}

    public Page2ViewModelCreateMessage ()
    {

    }

    public Page2ViewModelCreateMessage(ICollection<Note> availableNotes, SoundMappers soundType)
    {
        this.AvailableNotes = availableNotes;
        this.SoundType = soundType;
    }
}

您必须发送带有参数的 Page2ViewModelCreateMessage 实例并在导航时发送:
var message = new Page2ViewModelCreateMessage(myAvailableNotes, mySoundType)
Messenger.Default.Send(message);

在 Page2 上,您必须注册以接收 Page2ViewModelCreateMessage 类型的消息:
        Messenger.Default.Register<Page2ViewModelCreateMessage>(this, OnPage2ViewModelCreateMessage);
    ..
    public void OnPage2ViewModelCreateMessage(Page2ViewModelCreateMessage message)
    {
        var page2ViewModel = new Page2ViewModel(messsage.AvailableNotes, message.SoundType);
    }   

如您所见,为了更清楚,我已将您的 DoStuffViewModel 替换为 Page2ViewModel。

我希望这能帮到您。

注意:我不保证代码会像在记事本中写的那样工作。

关于silverlight - MVVM Light、Windows Phone、View & ViewModel 在页面之间导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6761604/

相关文章:

windows-phone-7 - 如何从返回堆栈中删除除当前页面之外的所有历史记录?

c# - WPF-如何从 View 而不是viewmodel显示自定义异常

c# - WPF绑定(bind):SelectedItem和SelectedIndex不起作用

c# - 尝试更改 WPF 中绑定(bind)的 RadioButton 时的奇怪行为

c# - 模型更改后如何更新 View ?

c# - 如何在 Silverlight 中验证 UI?

c# - 如何将我的设置公开给其他类

c# - 覆盖样式中的视觉状态而不覆盖控件模板

手机上的 Silverlight 网站

c# - 在 Windows Phone 中返回时将数据传回上一页的最佳方法