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

时间:2016-04-27 17:00:45

标签: c# data-binding xamarin xamarin.android mvvmcross

对于使用xamarin.android的MVVMCross来说,这是一个很新的场景。我在片段中有一个fab和mvx.recyclerview。因此,当我点击这个工厂时,它会使Recyclerview连续滚动。

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

这打破了mvvm模式,因此MVVM Cross中有任何方法或方法可以用来从ViewModel收听视图。

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

提前感谢。

1 个答案:

答案 0 :(得分:9)

好吧,因为ViewModel不应该知道View,所以你不应该调用它的任何方法。

我会在您的event可以订阅的ViewModel中提出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();
}

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

ViewModel.FabClickDone += ViewModel_FabClickDone;

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

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

由于您正在使用MVVMcross,我建议您使用命令,在其中调用OnFabClickDone();