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);
![](https://files-cdn.cnblogs.com/files/jiangyan219/Alipay.bmp)
您的资助是我最大的动力!
金额随意,欢迎来赏!
![](https://files-cdn.cnblogs.com/files/jiangyan219/WeChat.bmp)
我写的东西能让你能懂,那是义务
毕竟占用了你生命中的宝贵的时间和注意力
要是你还能喜欢我的作品,那就是缘分了
如果,您希望更容易地发现我的新博客,不妨点击一下绿色通道的因为,我的写作热情也离不开您的肯定支持,感谢您的阅读,我是【青青子衿】!