【发布时间】:2011-05-03 04:23:52
【问题描述】:
我不喜欢我使用的 Messenger(mvvm light 工具包),当我注册到 DateTime 并发送一些东西时,我的应用程序的其他部分也会获得数据时间数据,因为它们注册为“DateTime”类型。
为了防止我必须始终创建自定义对象并包装我的日期时间值。 那是愚蠢的。
你如何解决这个问题?
【问题讨论】:
我不喜欢我使用的 Messenger(mvvm light 工具包),当我注册到 DateTime 并发送一些东西时,我的应用程序的其他部分也会获得数据时间数据,因为它们注册为“DateTime”类型。
为了防止我必须始终创建自定义对象并包装我的日期时间值。 那是愚蠢的。
你如何解决这个问题?
【问题讨论】:
发送DateTime 类型的消息对我来说似乎是个坏主意……它不够具体,没有任何意义。
假设您收到一封仅包含日期的信,没有其他内容:您会怎么看?是生日、电影上映日期还是支付电话费的截止日期?
日期(或字符串、整数或任何原始类型)在没有上下文的情况下毫无意义。您需要创建特定的消息类型,这是您发送的信息有意义的唯一方式。
【讨论】:
您可以使用令牌对象发送消息,然后仅注册使用该特定令牌发送的 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; });
【讨论】: