当前位置: 代码迷 >> Silverlight >> MvvmLight框架消息多次执行 求解.解决办法
  详细解决方案

MvvmLight框架消息多次执行 求解.解决办法

热度:920   发布时间:2013-02-26 00:00:00.0
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控件就会显示修改过的数据。
  相关解决方案