WPF 消息唯一令牌管理

1.唯一令牌

/*----------------------------------------------------------------
 * 作    者 :姜  彦 
 * 项目名称 :EMRCPOE.Presentation.Common.Token
 * 类 名 称 :UniqueToken 
 * 命名空间 :EMRCPOE.Presentation.Common.Token
 * CLR 版本 :4.0.30319.42000
 * 创建时间 :2019/12/11 11:17:05
 * 当前版本 :1.0.0.0
 * WeChatQQ :771078740
 * My Email :jiangyan2008.521@gmail.com 
 *            jiangyan2008.521@qq.com  
 * 描述说明 :唯一令牌 
 * 
 * 修改历史 : 
 * 
*******************************************************************
 * Copyright @ JiangYan 2019. All rights reserved.
*******************************************************************
------------------------------------------------------------------*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EMRCPOE.Presentation.Common.Token
{
    /// <summary>
    /// 唯一令牌
    /// </summary>
    public class UniqueToken
    {
        /// <summary>
        /// 唯一令牌
        /// </summary>
        /// <param name="token">令牌Key</param>
        public UniqueToken(MessengerToken token)
        {
            Token = token;
        }

        /// <summary>
        /// 令牌
        /// </summary>
        public MessengerToken Token { get; private set; }       
    }
}

/*----------------------------------------------------------------
 * 备    注 :
 * 
 * 
 * 
*******************************************************************
 * Copyright @ JiangYan 2019. All rights reserved.
*******************************************************************
------------------------------------------------------------------*/

2.在基类中加入令牌键值

/*----------------------------------------------------------------
 * 作    者 :姜  彦 
 * 项目名称 :EMRCPOE.Presentation.Common.BaseModel
 * 类 名 称 :VMBase 
 * 命名空间 :EMRCPOE.Presentation.Common.BaseModel
 * CLR 版本 :4.0.30319.42000
 * 创建时间 :2019/12/11 11:28:30
 * 当前版本 :1.0.0.0
 * WeChatQQ :771078740
 * My Email :jiangyan2008.521@gmail.com 
 *            jiangyan2008.521@qq.com  
 * 描述说明 :ViewModel基类 
 * 
 * 修改历史 : 
 * 
*******************************************************************
 * Copyright @ JiangYan 2019. All rights reserved.
*******************************************************************
------------------------------------------------------------------*/

using EMRCPOE.Presentation.Common.Token;
using GalaSoft.MvvmLight;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EMRCPOE.Presentation.Common.BaseModel
{
    /// <summary>
    /// ViewModel基类
    /// </summary>
    public class VMBase:ViewModelBase
    {
        #region Construction
        /// <summary>
        /// ViewModel基类
        /// </summary>
        public VMBase()
        {
            InitializeToken();
        }

        #endregion

        #region Token

        /// <summary>
        /// 非模式显示
        /// </summary>
        public UniqueToken ShowToken { get; protected set; }
       
        /// <summary>
        /// 模式显示
        /// </summary>
        public UniqueToken ShowDialogToken { get; protected set; }

        /// <summary>
        /// 刷新
        /// </summary>
        public UniqueToken RefreshToken { get; protected set; }

        /// <summary>
        /// 关闭
        /// </summary>
        public UniqueToken CloseToken { get; protected set; }

        /// <summary>
        /// 初始化令牌
        /// </summary>
        protected virtual void InitializeToken()
        {
            ShowToken = new UniqueToken(new MessengerToken(Guid.NewGuid().ToString()));
            ShowDialogToken = new UniqueToken(new MessengerToken(Guid.NewGuid().ToString()));
            CloseToken = new UniqueToken(new MessengerToken(Guid.NewGuid().ToString()));
            RefreshToken = new UniqueToken(new MessengerToken(Guid.NewGuid().ToString()));
        }
        #endregion
    }
}

/*----------------------------------------------------------------
 * 备    注 :
 * 
 * 
 * 
*******************************************************************
 * Copyright @ JiangYan 2019. All rights reserved.
*******************************************************************
------------------------------------------------------------------*/

3.消息构造

  public class MessengerToken
    {
        #region Construction
        public MessengerToken(string key)
        {
            this.UniqueToken = key;
        }

        public string UniqueToken { get; private set; }

        #endregion

4.消息初始化与唯一令牌赋值

  protected override void InitializeToken()
        {
            base.InitializeToken();
            ShowDialogToken = new UniqueToken(new MessengerToken(MessengerToken.WinDrugDicEdit));
        }

5.唯一令牌消息订阅

/**************************************************************** 
 * 作    者 :姜  彦 
 * 项目名称 :EMRCPOE.Presentation.DrugStore.View
 * 控件名称 :UcDrugDic 
 * 命名空间 :EMRCPOE.Presentation.DrugStore.View
 * CLR 版本 :4.0.30319.42000
 * 创建时间 :2019/3/26 13:40:25 
 * 当前版本 :1.0.0.0 
 * My Email :jiangyan2008.521@gmail.com 
 *            jiangyan2008.521@qq.com
 * 描述说明 :药品字典
 * 
 * 修改历史 : 
 * 
***************************************************************** 
 * Copyright @ JiangYan 2019 All rights reserved 
*****************************************************************/

using EMRCPOE.Presentation.Common;
using EMRCPOE.Presentation.Common.OperateMessage;
using EMRCPOE.Presentation.DrugStore.ViewModel;
using GalaSoft.MvvmLight.Messaging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Util.Helpers;

namespace EMRCPOE.Presentation.DrugStore.View
{
    /// <summary>
    /// UcDrugDic.xaml 的交互逻辑
    /// </summary>
    public partial class UCDrugAirscape : UserControl
    {
        #region Construction
        /// <summary>
        /// 构造函数
        /// </summary>
        public UCDrugAirscape()
        {        
            InitializeComponent();
            DataContext = Ioc.Create<DrugAirscapeViewModel>();
            Loaded += (sender, e) => RegisterMessenger();
            Unloaded += (sender, e) => Messenger.Default.Unregister(this);
        }
        #endregion
        private void RegisterMessenger()
        {
            var token = ((DrugAirscapeViewModel)DataContext).ShowDialogToken;
            Messenger.Default.Register<OperateMessage>(this, token, WinDrugDicEditShow);
        }    

        private void WinDrugDicEditShow(OperateMessage obj)
        {

            if (obj.OperateType == OperateType.Add || obj.OperateType == OperateType.Modify || obj.OperateType == OperateType.Audit || obj.OperateType == OperateType.View || obj.OperateType == OperateType.AddandModify)
            {
                var vm = Ioc.Create<DrugDicEditViewModel>();
                UCDrugDicEdit view = new UCDrugDicEdit();
                view.DataContext = vm;
                vm.OperateMessageModel = obj;
                WinDrugDicEdit win = new WinDrugDicEdit();
                win.grdContainer.Children.Clear();
                win.grdContainer.Children.Add(view);
                win.ShowDialog();
            }
            else if (obj.OperateType == OperateType.CloseDialog)
            {

            }

        }
    }
}

/*----------------------------------------------------------------
 * 备    注 :
 * 
 * 
 * 
*******************************************************************
 * Copyright @ JiangYan 2019. All rights reserved.
*******************************************************************
------------------------------------------------------------------*/

6.唯一令牌消息触发

  Messenger.Default.Send(new OperateMessage
                {
                    OperateType = OperateType.Add,
                    obj = null
                }, ShowDialogToken);

 

posted @ 2019-12-31 13:47  <--青青子衿-->  阅读(428)  评论(0编辑  收藏  举报
// /**/ // 在页脚Html代码 引入 // function btn_donateClick() { var DivPopup = document.getElementById('Div_popup'); var DivMasklayer = document.getElementById('div_masklayer'); DivMasklayer.style.display = 'block'; DivPopup.style.display = 'block'; var h = Div_popup.clientHeight; with (Div_popup.style) { marginTop = -h / 2 + 'px'; } } function MasklayerClick() { var masklayer = document.getElementById('div_masklayer'); var divImg = document.getElementById("Div_popup"); masklayer.style.display = "none"; divImg.style.display = "none"; } setTimeout( function () { document.getElementById('div_masklayer').onclick = MasklayerClick; document.getElementById('btn_donate').onclick = btn_donateClick; var a_gzw = document.getElementById("guanzhuwo"); a_gzw.href = "javascript:void(0);"; $("#guanzhuwo").attr("onclick","follow('33513f9f-ba13-e011-ac81-842b2b196315');"); }, 900);