вижу два варианта:
Во-первых, вы можете пометить ViewModelB интерфейсом «маркер» и использовать его вместо вашего фактического имени класса.
Messenger.Default.Send<string, IMessageTarget>("Something Happened");
Это не мое любимое решение, но оно должно работать.
Или вы можете зарегистрироваться для сообщений с определенным токеном в ViewModelB при отправке неоднозначного сообщения из ViewModelA:
В ViewModelA:
Messenger.Default.Send<string>("Something Happened", "MessageDisambiguator");
В ViewModelB:
Messenger.Default.Register<string>(
this,
"MessageDisambiguator",
(action) => DoWork(action)
);
Гораздо чище, и все равно позволит вам смоделировать ViewModelB для целей тестирования.
Могут быть и другие варианты, но это те, которые всплывают в мою голову в этот поздний час ...