Ich habe folgendes Verhalten:MVVM Licht werfende Nachrichten
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));
...
}
Es nutzt grundsätzlich die NavigateToPageAction (erhältlich in Mischung auch), sondern ermöglicht es mir auch ein Ansichtsmodell Objekt auszustrahlen (ich benutze es der Firma List Seite zu navigieren Detailseite und das ausgewählte Objekt zu übergeben)
XAML würde wie folgt aussehen: (die PassedObject Bindung ist auf eine Instanz DetailViewModel, die von ViewModelBase erbt)
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<b:NavigateAndBroadcastAction TargetPage="/View/SubjectDetailPage.xaml" NavigationToken="SubjectDetailNavigationToken" PassedObject="{Binding}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Jetzt möchte ich für die Nachricht registrieren:
Messenger.Default.Register<NavigatingMessage<DetailViewModel>>(this, NavigationToken, true, Action);
Aber das funktioniert nicht. Was funktioniert, ist, sich für NavigatingMessage<ViewModelBase>
zu registrieren und dann die empfangene Nachricht an NavigatingMessage<DetailViewModel>
zu übertragen. Gibt es einen Weg dahin?
Kann dies geschehen, damit der Messenger den tatsächlichen Typ des gesendeten Objekts erkennt und korrekt an Objekte übermittelt, die für diesen Typ registriert sind?
Warum funktioniert es nicht? Erhalten Sie einen Kompilierungsfehler? Eine Ausnahme? –
Nein, die Nachricht wird einfach nicht gesendet –
Kannst du nicht die Nachricht vom richtigen Typ senden? –