2016-04-27 5 views
3

Am neu zu MVVMCross mit Xamarin.android so wenig mit einem Szenario getroffen. Ich habe eine tolle und mvx.recyclerview in einem Fragment. Wenn ich also auf diese Funktion klicke, wird die Recycleransicht um eine Zeile scrollen.Wie Update View von ViewModel mit MVVMCross und Xamarin.Android

d.h

void onclick(sender object ,eventargs e) 
{ 
    mrecyclerview.SmoothScrollToPosition(somevariable++); // do something. 
} 

dieses mvvm Muster bricht, so ist es eine Möglichkeit oder Methode in dem MVVM Kreuz, das ich zurück auf die Ansicht von Viewmodel hören nutzen können.

fab.click Bindung mit ICommand => viewmodel => view => updatescroll().

danke im voraus.

Antwort

7

Nun, da die ViewModel nicht über die View wissen sollten, sollten Sie keine Methode davon aufrufen.

Ich würde vorschlagen, eine event in Ihrem ViewModel, wo Sie Ihre View abonnieren können. Also rufst du deine event so etwas wie FabClickDone an und deine Ansicht macht was auch immer sie will, als dieses Ereignis auftrat. In deinem Fall Scrollen. Hier

ist ein Codebeispiel für Ihre Ansichtsmodell:

public delegate void FabClickDoneEvent(object sender, EventArgs args); 
public event FabClickDoneEvent FabClickDone; 

protected virtual void OnFabClickDone() 
{ 
    FabClickDone?.Invoke(this, EventArgs.Empty); 
} 

Sie dann einfach aufrufen, indem

void onclick(sender object , eventargs e) 
{ 
    // Do something inside your viewmodel 
    // ... 
    OnFabClickDone(); 
} 

Ihrer Ansicht Konstruktor dieses Ereignis abonnieren:

ViewModel.FabClickDone += ViewModel_FabClickDone; 

Und Erstellen Sie eine Methode, mit der Sie scrollen können

void ViewModel_FabClickDone(Object sender, EventArgs e) 
{ 
    mrecyclerview.SmoothScrollToPosition(somevariable++); // do something. 
} 

Da Sie MVVMcross verwenden, würde ich vorschlagen, Sie verwenden einen Befehl, wo Sie OnFabClickDone() aufrufen;

+0

danke matt und Entschuldigung für die späte Antwort. – Dilmah

+0

Wahrscheinlich bin ich etwas spät dran, aber mein View-Konstruktor kann das Ereignisfeld ".FabClickDone" nicht sehen – DanilGholtsman