WPF新手请教一个给usercontrol传值的问题

god_00544 2018-04-23 08:00:09
我在一个工程中添加了一个usercontrol当做View,然后又新建了一个Viewmodel。
我在Viewmodel中调用外部采集设备并采集得到数据,我是想将采到数据实时传递给usercontrol中的某个变量,并做相应的处理。
我原本的想法是,在Viewmodel中没获取完一次数据就发送一个消息(Messenger.Default.Send<String>(cm.C7_V, "VoltageToView1");),然后在Usercontrol中注册该消息(Messenger.Default.Register<String>(this, "VoltageToView1", ReceiveVol);)。但是发现该方法在usercontrol中不好使。
我在网上搜了好多帖子,还不是很清楚应该怎么办?是否需要依赖属性什么的吗?

ps:主界面是一个window,usercontrol相当于是嵌在主页面上的一个子界面,一共有3个这样的子界面。
...全文
1530 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
god_00544 2018-04-24
  • 打赏
  • 举报
回复
https://msdn.microsoft.com/zh-cn/magazine/dn745866.aspx中写道“MVVM Light Messenger 旨在通过简单的前提来精简此场景:任何对象都可以是接收端;任何对象都可以是发送端;任何对象都可以是消息。” 所以我感觉usercontrol中接收消息肯定是可以的吧,可能是程序写的有问题,技术掌握不够透彻。暂时先用全局变量解决当前问题,有功夫在回来解决这个问题吧。
Eason0807 2018-04-24
  • 打赏
  • 举报
回复
UserControl肯定是可以的
Eason0807 2018-04-23
  • 打赏
  • 举报
回复
WPF控件都支持数据绑定吧?如果你要处理事件的话,可以考虑把事件转成命令
Eason0807 2018-04-23
  • 打赏
  • 举报
回复
一个View对应一个ViewModel(有时候一个ViewModel对应多个View也有),我的理解是View负责显示和接受用户输入,ViewModel负责处理
god_00544 2018-04-23
  • 打赏
  • 举报
回复
我用了一个第三方的控件,这个控件不支持MVVM模式开发,只能在view下面写。所以为了用这个控件,我只能把数据传到这个View下使用。
Eason0807 2018-04-23
  • 打赏
  • 举报
回复
我说这个普通处理范围比较大了,数据绑定是WPF的核心嘛,你就说你想要干嘛吧? View只用来显示数据,接收输入,通过绑定传给ViewModel,然后ViewModel处理;如果是变量传递,一般也是ViewModel之间传递
god_00544 2018-04-23
  • 打赏
  • 举报
回复
引用 7 楼 weixin_38641834 的回复:
不理解你传过去要干嘛?普通的处理可以通过绑定完成,弹出窗台可以用DialogService
也许是我的思路有问题,你说的“普通处理可以通过绑定完成”,这个怎么讲,能否举个例子给我点启发?
Eason0807 2018-04-23
  • 打赏
  • 举报
回复
你在Unload事件里写个 UnRegister试试
Eason0807 2018-04-23
  • 打赏
  • 举报
回复
不理解你传过去要干嘛?普通的处理可以通过绑定完成,弹出窗台可以用DialogService
Eason0807 2018-04-23
  • 打赏
  • 举报
回复
UserControl上注册了的消息,在关闭UserControl的时候你需要卸载的,是不是这里出了问题?
god_00544 2018-04-23
  • 打赏
  • 举报
回复
引用 4 楼 weixin_38641834 的回复:
你这个 cm.C7_V 是string吗?
是的。其实这个方法我用在window下是没有问题的,只是换成usercontrol,就不灵了,不知道是不是哪里没写对。
god_00544 2018-04-23
  • 打赏
  • 举报
回复
引用 3 楼 weixin_38641834 的回复:
https://www.cnblogs.com/wzh2010/p/6285954.html 这个有系列博客是将MVVMLIGHT的,后面几章有讲消息
实际上我就是参考这个网站上的帖子写的。在Window下没问题,放在Usercontrol就不行,还得继续找原因。
Eason0807 2018-04-23
  • 打赏
  • 举报
回复
你这个 cm.C7_V 是string吗?
Eason0807 2018-04-23
  • 打赏
  • 举报
回复
https://www.cnblogs.com/wzh2010/p/6285954.html 这个有系列博客是将MVVMLIGHT的,后面几章有讲消息
god_00544 2018-04-23
  • 打赏
  • 举报
回复
引用 1 楼 weixin_38641834 的回复:
Messenger.Default.Send 你这个是MVVM Light里的吧?你找找MVVM Light关于消息的说明看看 另外,对于数据的处理不应该是在ViewModel里做的吗?怎么还给View传过去?
是的,我用的是MVVMLight。数据处理却是应该放在VIEWMODEL中,但是我这个情况比较特别,没办法只能放在View下的cs里处理了。
Eason0807 2018-04-23
  • 打赏
  • 举报
回复
Messenger.Default.Send 你这个是MVVM Light里的吧?你找找MVVM Light关于消息的说明看看 另外,对于数据的处理不应该是在ViewModel里做的吗?怎么还给View传过去?

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧