У меня есть следующее Поведение:MVVM Light литейных сообщения
public class NavigateAndBroadcastAction : NavigateToPageAction
{
protected override void Invoke(object parameter)
{
base.Invoke(parameter);
Messenger.Default.Send<NavigatingMessage<ViewModelBase>>(new NavigatingMessage<ViewModelBase>(this, PassedObject), NavigationToken);
}
public ViewModelBase PassedObject
{
get { return (ViewModelBase)GetValue(PassedObjectProperty); }
set { SetValue(PassedObjectProperty, value); }
}
// Using a DependencyProperty as the backing store for PassedObject. This enables animation, styling, binding, etc...
public static readonly DependencyProperty PassedObjectProperty = DependencyProperty.Register("PassedObject", typeof(ViewModelBase), typeof(NavigateAndBroadcastAction), new PropertyMetadata(null));
...
}
Это в основном использует NavigateToPageAction (доступное в Blend, также), но позволяет мне также транслировать объект ViewModel (я использую его, чтобы перейти из списка страницы Деталь страницы и передать выбранный объект)
Xaml будет выглядеть следующим образом: (PassedObject Привязка к экземпляру DetailViewModel который наследуется от ViewModelBase)
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<b:NavigateAndBroadcastAction TargetPage="/View/SubjectDetailPage.xaml" NavigationToken="SubjectDetailNavigationToken" PassedObject="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Теперь я хочу, чтобы зарегистрироваться на сообщение:
Messenger.Default.Register<NavigatingMessage<DetailViewModel>>(this, NavigationToken, true, Action);
Но это не работает. Что работает, это зарегистрироваться на NavigatingMessage<ViewModelBase>
, а затем передать полученное сообщение NavigatingMessage<DetailViewModel>
. Есть ли способ обойти это?
Можно ли это сделать так, чтобы посланник обнаруживал фактический тип отправляемого объекта и правильно доставлял объекты, которые регистрировались для этого типа?
Почему это не работает? Вы получаете ошибку компиляции? Исключение? –
Нет, сообщение просто не доставлено –
Не можете ли вы отправить сообщение с правильным типом? –