新建消息事件
添加文件:Mytodo.Common.Events.MessageModel.cs
using Prism.Events;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Diagnostics;
namespace Mytodo.Common.Events
{
public class MessageModel
{
public string Filter { get; set; }
public string Message { get; set; }
}
public class MessageEvent:PubSubEvent<MessageModel>
{
}
}
注册、发送提示消息
/// <summary>
/// 注册提示消息
/// </summary>
/// <param name="aggregator"></param>
/// <param name="action"></param>
public static void ResgiterMessage(this IEventAggregator aggregator,
Action<MessageModel> action, string filterName = "Main")
{
aggregator.GetEvent<MessageEvent>().Subscribe(action,
ThreadOption.PublisherThread, true, (m) =>
{
return m.Filter.Equals(filterName);
});
}
/// <summary>
/// 发送提示消息
/// </summary>
/// <param name="aggregator"></param>
/// <param name="message"></param>
public static void SendMessage(this IEventAggregator aggregator, string message, string filterName = "Main")
{
aggregator.GetEvent<MessageEvent>().Publish(new MessageModel()
{
Filter = filterName,
Message = message,
});
}
UI增加Snackbar
修改文件:Mytodo.Views.MainView.xaml
</materialDesign:DrawerHost.LeftDrawerContent>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition />
</Grid.RowDefinitions>
<materialDesign:Snackbar
x:Name="skbar"
Panel.ZIndex="1"
MessageQueue="{materialDesign:MessageQueue}" />
<materialDesign:ColorZone
注册消息
修改文件:Mytodo.Views.MainViewcs 构造函数添加
要注意的是,我们要发送的是文本,所以,this.skbar.MessageQueue.Enqueue函数内发送的是文本。
aggregator.ResgiterMessage(arg =>
{
this.skbar.MessageQueue.Enqueue(arg.Message);
});
在需要的地方推送消息
aggregator.SendMessage("已完成!");
文章介绍了如何在Mytodo项目中使用Prism的EventAggregator实现消息事件的注册和发送,创建了MessageModel和MessageEvent类来承载消息信息。在MainView中添加Snackbar组件以显示消息,并在构造函数中注册消息接收,通过调用SendMessage方法可以在应用的任何地方推送提示消息。
1072

被折叠的 条评论
为什么被折叠?



