2016-07-06 6 views
3

Ich habe gerade ReactiveUI zu einer vorhandenen Codebasis hinzugefügt. Natürlich, für die erste Kontrolle habe ich es versucht mit einem Haken. Ich benutze es mit einem UserControl in einem TabControl eingebettet. Der Code sieht etwa so aus:Wie implementiere ich IActivationForViewFetcher für ein Kind UserControl?

public partial class TabPageControl : UserControl, IViewFor<TestViewModel> 
{ 
    public TabPageControl() 
    { 
     InitializeComponent(); 

     ViewModel = new TestViewModel(); 

     this.WhenActivated(dispose => 
     { 
      dispose(this.Bind(...)); 
      dispose(this.BindCommand(...)); 
     }); 
    } 
} 

Wenn ich die app laufen, bekomme ich folgende Fehlermeldung:

Sie wissen nicht, wie zu erkennen, wenn TabPageControl aktiviert/deaktiviert ist, können Sie implementieren müssen IActivationForViewFetcher

Also, wie implementiere ich IActivationForViewFetcher? Ich bin nicht sicher, was ich mit GetAffinityForView tun soll. Ich gehe davon aus, in GetActivationForView Ich muss überprüfen, ob das UserControl das derzeit in der TabControl sichtbar ist?

Antwort

0

Obwohl ich gerne verstehen würde, wie die Methoden für IActivationForViewFetcher zu implementieren (vor allem der Teil, wo ich identifizieren, dass ein Steuerelement im VisualTree ist) - die wahre Ursache für mein Problem war, dass meine Hauptbaugruppe nicht die entsprechenden hatte Verweise (die Steuerelemente befinden sich in einer Klassenassembly).

Ich nehme an (weil ich die ReactiveUI Quelle überflogen habe) ReactiveUI.Winforms.Registrations muss von der Hauptbaugruppe instanziiert werden - was die Registrierung ActivationForViewFetcher beinhaltet.

Übrigens ist die Klassenbibliothek in C# geschrieben und die Hauptbaugruppe ist VB.NET. Ich bin also nicht sicher, ob dies zu dem Problem beigetragen hat.

Zumindest funktioniert es jetzt!

+0

Ich habe das gleiche Problem für mein Xamarin Droid-Projekt. Wenn ich 'this.WhenActivated' rufe, erhalte ich dieselbe Fehlermeldung, die Sie oben beschrieben haben. In meinem Xamarin iOS-Projekt funktioniert jedoch alles gut. Kannst du etwas ausführlicher erklären, wie du das Problem gelöst hast? – jfmg

+0

In meinem Fall (aus dem Speicher) musste ich auf die ReactiveUI-Assemblies in meiner Hauptbaugruppe (sowie den Bibliotheken) verweisen. Dies ruft dann 'ReactiveUI.Winforms.Registrations' auf, das die Standard-Handler einrichtet. – Mitkins

+0

Da ich Winforms verwende, kann ich' WhenActivated' trotzdem nicht verwenden (es sei denn, das wurde kürzlich geändert). Also habe ich vielleicht das Problem vermieden, vor dem Sie stehen – Mitkins