对于使用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()。
提前感谢。
答案 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();