如何使用 MVVMCross 和 Xamarin.Android 从 ViewModel 更新视图

How to Update View from ViewModel using MVVMCross and Xamarin.Android

我是 MVVMCross 的新手,xamarin.android 所以对场景一无所知。我在一个片段中有一个 fab 和 mvx.recyclerview。所以当我点击这个 fab 时,它会让 recyclerview 滚动一行。

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

这打破了 mvvm 模式,所以我可以使用 MVVM Cross 中的任何方式或方法从 ViewModel 回听视图。

fab.click 与 ICommand 绑定 => viewmodel => view=> updatescroll()。

提前致谢。

嗯,既然 ViewModel 不应该知道 View,你不应该调用它的任何方法。

我建议在您的 ViewModel 中添加一个 event,您的 View 可以订阅。因此,您将 event 称为 FabClickDone 之类的名称,并且当此事件发生时,您的视图会做任何它想做的事情。在你的情况下滚动。

这是您的 ViewModel 的代码示例:

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

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

然后您只需通过

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

在您的视图构造函数中订阅此事件:

ViewModel.FabClickDone += ViewModel_FabClickDone;

并创建一个您要滚动的方法

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

由于您使用的是 MVVMcross,我建议您使用一个命令,您可以在其中调用 OnFabClickDone();