【问题标题】:MVVM: Using a Messenger only with custom objects to make Send<> "id" unique?MVVM:仅将 Messenger 与自定义对象一起使用以使 Send<>“id”独一无二?
【发布时间】:2011-05-03 04:23:52
【问题描述】:

我不喜欢我使用的 Messenger(mvvm light 工具包),当我注册到 DateTime 并发送一些东西时,我的应用程序的其他部分也会获得数据时间数据,因为它们注册为“DateTime”类型。

为了防止我必须始终创建自定义对象并包装我的日期时间值。 那是愚蠢的。

你如何解决这个问题?

【问题讨论】:

    标签: c# wpf mvvm send mediator


    【解决方案1】:

    发送DateTime 类型的消息对我来说似乎是个坏主意……它不够具体,没有任何意义。

    假设您收到一封仅包含日期的信,没有其他内容:您会怎么看?是生日、电影上映日期还是支付电话费的截止日期?

    日期(或字符串、整数或任何原始类型)在没有上下文的情况下毫无意义。您需要创建特定的消息类型,这是您发送的信息有意义的唯一方式。

    【讨论】:

    • 好吧,Thomas 这就是我所坚持的。那么,您是否为您发送的每个新日期时间创建一个具有一个日期时间属性的新类?
    • 我为每种特定类型的消息创建了一个消息类,是的。
    • 你把它命名为消息类。这堂课有什么特别的吗?或者它只是一个具有属性 datetime 的自定义类?
    • 不,没什么特别的,可以是任何自定义类
    【解决方案2】:

    您可以使用令牌对象发送消息,然后仅注册使用该特定令牌发送的 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; });
    

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-28
      • 2013-04-17
      • 1970-01-01
      相关资源
      最近更新 更多