使用MVVM light工具包,我有一个viewmodel绑定到第一页的视图.当用户点击按钮时,它会重定向到另一个视图,这将是第二页
即:
Page2Command = new DelegateCommand((obj) => Messenger.Default.Send<Uri>(new Uri("/DoStuffVIEw.xaml",UriKind.relative),Common.CommonResources.GoTodoStuffRequest)) });
问题是,第二个视图的视图模型(我看到它的方式)在构造函数中有几个参数,它们基本上是在第一页上设置的配置的依赖项.
即:
public DoStuffviewmodel(ICollection<Note> availableNotes,SoundMappers soundType){}
问题出在这里..如何用第一页上用户动态选择的数据实例化viewmodel?
我无法使用MVVM光提供的viewmodelLocator模式,因为这些视图模型没有任何依赖关系,它们只是它们自己(或者它们可以从数据库,文件或其他任何方式检索数据,但它们没有任何动态输入数据).我可以通过视图的构造函数来实现它,在那里实例化viewmodel,并为视图的DataSource分配新创建的视图模型,但我认为这样做并不是很好.
建议?
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); }
正如您所看到的,我已使用Page2viewmodel替换您的DoStuffviewmodel以使其更清晰.
我希望这能帮到您.
注意:我不保证代码将在记事本中写入.
总结以上是内存溢出为你收集整理的silverlight – MVVM Light,Windows Phone,View和ViewModel页面之间的导航全部内容,希望文章能够帮你解决silverlight – MVVM Light,Windows Phone,View和ViewModel页面之间的导航所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)