首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 媒体动画 > CAD教程 >

MvvmLight框架讯息多次执行 求解.

2012-09-15 
MvvmLight框架消息多次执行 求解...案例场景: 我有一个查询列表页面,有多列数据,最后一列是 点击修改 按钮

MvvmLight框架消息多次执行 求解...
案例场景: 我有一个查询列表页面,有多列数据,最后一列是 点击修改 按钮。,点击修改按钮后会弹出修改页面,修改也面点击修改,就掉用修改服务,如果成功就刷新查询列表页面数据,子窗体不关闭.
  
  消息类
  /// <summary>
  /// 关闭子窗体并刷新数据
  /// </summary>
  public class CloseWindowOrUpdateDataMessage : MessageBase
  {
  public CloseWindowOrUpdateDataMessage(object sender) : base(sender) { }
  }

  //调用服务修改成功后我会发一条消息
Messenger.Default.Send<Message.CloseWindowOrUpdateDataMessage>(new Message.CloseWindowOrUpdateDataMessage("PageBarginsViewModel"));

  ///查询列表页面对应Viewmodel构造函数里接收消息

  Messenger.Default.Register<Message.CloseWindowOrUpdateDataMessage>(this, msg =>
  {
  if (msg.Sender == "PageBarginsViewModel")// 疑问一??这回进来3次以上不解,我这只想让它进来一次 {
  ///调用 本Viewmodel里面查询方法
  }
  });

疑问二??一个消息类在项目中可以多个地方使用吗?如果公用消息类会不会造出消息混乱?  


[解决办法]
先说疑问二。MvvmLight 的 Messenger 确实很灵活,但用多了容易混乱,建议好好规划。另外如果你Register了同一个Message好多次,等Send发生时,所有Register都有执行。

再说说疑问一。不知道你的具体代码,不好解释为什么3次调用,但你可以设置一个flag来判断是否进来过。更好的方法还是使用MVVM模式,当子窗体修改ViewModel中的邦定源,主窗口中的Collection控件就会显示修改过的数据。

热点排行