MVVM: использовать Messenger только с пользовательскими объектами, чтобы сделать Send <> «id» уникальным? - PullRequest
1 голос
/ 01 ноября 2010

что мне не нравится в Messenger, который я использую (легкий набор инструментов mvvm), когда я регистрируюсь в DateTime и отправляю что-то, другие части моего приложения тоже получают данные времени, потому что они зарегистрированы в типе «DateTime».

Чтобы предотвратить это, я должен всегда создавать собственные объекты и переносить значение даты и времени. Это ступи.

Как обойти эту проблему?

Ответы [ 2 ]

1 голос
/ 01 ноября 2010

Отправка сообщений типа DateTime кажется мне плохой идеей ... Это недостаточно конкретно, не имеет никакого значения.

Представьте, что вы получили письмо, которое просто содержит дату, и ничего больше: что бы вы из нее сделали? Это день рождения, дата выхода фильма, крайний срок оплаты счета за телефон?

Дата (или строка, или int, или любой примитивный тип) ничего не значит без контекста. Вам нужно создавать сообщения определенного типа, это единственный способ, которым отправляемая вами информация может быть значимой.

0 голосов
/ 06 января 2011

Вы можете отправить свое сообщение с объектом токена, а затем зарегистрироваться только для DateTime, отправленного с этим конкретным токеном.

Кажется, я помню, как Ларуент создал класс примерно так:

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; });
...