我不喜欢我使用的 Messenger(mvvm light 工具包),当我注册到 DateTime 并发送一些东西时,我的应用程序的其他部分也会获取数据时间数据,因为它们注册为“DateTime”类型。
为了防止这种情况发生,我必须始终创建自定义对象并包装我的日期时间值。那是愚蠢的。
你如何解决这个问题?
发送类型的消息DateTime
对我来说似乎是个坏主意……它不够具体,没有任何意义。
想象一下,你收到一封只包含日期的信,没有其他内容:你会怎么做?是生日、电影的上映日期、支付电话费的最后期限吗?
日期(或字符串、int 或任何原始类型)没有上下文就没有任何意义。您需要创建特定的消息类型,这是您发送的信息有意义的唯一方式。
您可以使用令牌对象发送消息,然后仅注册使用该特定令牌发送的 DateTime。
我似乎记得 Laruent 创建了一个类似这样的类:
public class Notifications
{
public static readonly String SystemDateChanged = Guid.NewGuid().ToString();
public static readonly String SomeOtherDateChanged = Guid.NewGuid().ToString();
}
然后发送您的信息
Messenger.Default.Send(newSystemDateTime, Notifications.SystemDateChanged );
对 SystemDateTime(而不是其他日期时间)感兴趣的各方将注册它
Messenger.Default.Register<DateTime>(this, Notifications.SystemDateChanged, true,
d => { mydate = d; });