
我们有Parent VIEw及其相应的viewmodel,在该VIEw中我们选择item,然后我们想要创建新的Child VIEw(编辑选择的细节),在XAML中实例化它的viewmodel.
当我需要将值传递给Child viewmodel构造函数时,会出现问题(它是必须从数据库中获取的数据的ID).我假设Parent的viewmodel必须与Child的viewmodel进行通信 – 但是由于Child的viewmodel没有实例化,因为Child的viewmodel在XAML中没有实例化,因此我们不能使用Messenger(MVVM light Toolkit)并且只是从Parent的ModelVIEw传播该信息,因为Child的ModelVIEw无法订阅(注册到该类型的消息).
我不想打破MVVM模式,也找不到任何好的解决方案.我很感激能得到的所有帮助.
解决方法 MVVM模式的主要租户之一是您应该能够在没有VIEw的情况下执行viewmodel代码,以便对VIEw逻辑进行单元测试.换句话说,理想情况下,您应该能够以“无头”模式执行您的应用程序.在您的示例中,您声明ParentVIEw创建了一个ChildVIEw,后者又创建了一个Childviewmodel(您正在努力连接).这可以在无头模式下工作吗?在我看来,你依靠你的视图来执行这个父子导航.
如果以另一种方式翻转它,让Parentviewmodel创建Childviewmodel,则viewmodel之间的通信不再存在问题. ParentVIEw需要为正在创建的新Childviewmodel“监视”(即属性更改),并相应地构造ChildVIEw.
更详细:
> ParentVIEw实例化ParentVM>用户以需要孩子的方式进行交互> ParentVM创建一个ChildVM,通过ChildVM属性公开它> ParentVIEw处理生成的PropertyChanged事件,创建一个ChildVIEw,将其DataContext设置为ChildVM.
总结以上是内存溢出为你收集整理的silverlight – MVVM在视图模型之间传递值全部内容,希望文章能够帮你解决silverlight – MVVM在视图模型之间传递值所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)