2016-09-13 2 views
0

In a previous question Ich baute eine event Klasse, public class SetObjectEvent : PubSubEvent<MyObject> { }, die perfekt funktioniert. Allerdings möchte ich jetzt dasselbe mit Methoden machen, also muss ich etwas anderes als PubSubEvent<> (?)Ein PubSubEvent für Methoden?

erweitern. Beim Durchsuchen von le bigue o'le interwebz, die meisten Frage wie "Wie rufe ich eine Methode von einem anderen ViewModel über dieses ViewModel "beziehen sich Leute auf Abhängigkeiten oder Befehle, die feine Lösungen sind, die ich in der Vergangenheit verwendet habe. Aber in diesem speziellen Fall funktioniert keiner von beiden, weil es sich um einen Fall handelt, in dem das Geschwisterkind des Elternteils von genannt werden muss, sagte Geschwister. Da das Elternteil nicht von seiner Existenz weiß (und es nicht wissen kann), außer dass das Kind hin und wieder ein paar Eigenschaften anfordert, wäre ich der Meinung, dass die Verwendung eines EventAggregators die bestmögliche Lösung ist, außer jemand hat eine bessere Idee.

Also konkret meine Frage ist; Mit was soll ich PubSubEvent<> in meinem SetObjectEvent ersetzen, um die ähnliche Version CallMethodEvent : ?x?x?x? { } zu erhalten?

Antwort

1

Nicht sicher, ob ich Ihr Problem vollständig verstehe, weil die Lösung ein bisschen ist trivial:

EventAggregator.GetEvent<MyEvent>().Subscribe(MyMethod); 

mit

public class MyEvent : PubSubEvent 
{ 
} 

Dies führt MyMethod jedes Mal MyEvent veröffentlicht wird, ist nicht das, was der ganze Event-Mechanismus für ist?

Ich denke, Sie könnten auch eine Methode als Payload veröffentlichen, wenn Sie eine Methode ausführen möchten, die vom Herausgeber im Kontext jedes Abonnenten definiert wird, aber ich habe noch keinen Anwendungsfall dafür gefunden:)

+0

Das Problem mit dem, was Sie tun, ist, dass 'PubSubEvent' kein gültiges Argument ist. Es gibt nur 'PubSubEvent ', weshalb ich eine Dummy-Saite umblättere, wie in meiner Selbstantwort verkündet. – Ciphra

+0

Welche Version von Prism verwenden Sie? Version 6.2 hat ein parameterloses 'PubSubEvent', wenn Sie eine ältere Version verwenden, können Sie den Dummy-Parameter nicht umgehen ... – Haukinger

+0

Das war das Problem, ich lief noch 6.1. Auf 6.2 aktualisiert und funktioniert einwandfrei, danke! – Ciphra

0

Ich habe eine (temporäre) Problemumgehung erstellt, um das Problem für jetzt zu lösen;

durch genau die gleichen Aufbau zu schaffen, aber mit einer Schnur, CallMethodEvent : PubSubEvent<string> { }, kann ich die gewünschten Methoden durch publishing nennen, this.EventAggregator.GetEvent<CallMethodEvent>().Publish("SomeUselessString"); und nach der Anmeldung, this.EventAggregator.GetEvent<CallMethodEvent>().Subscribe((someString) => { this.MethodToBeCalled(); }); wird die gewünschte Methode aufgerufen. Der Hauptnachteil ist, dass es immer wieder eine Schnur gibt, die buchstäblich aus keinem anderen Grund herumgewirbelt wird, als "es zum Laufen zu bringen". Wenn keine andere Antwort erscheint, muss ich dabei bleiben, aber ich würde einen saubereren Weg bevorzugen, das Problem zu lösen.

Verwandte Themen