【问题标题】:How to Update View from ViewModel using MVVMCross and Xamarin.Android如何使用 MVVMCross 和 Xamarin.Android 从 ViewModel 更新视图
【发布时间】:2016-04-27 17:00:45
【问题描述】:

我是使用 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 => view=> updatescroll() 绑定。

提前致谢。

【问题讨论】:

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


    【解决方案1】:

    好吧,既然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();
    }
    

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

    ViewModel.FabClickDone += ViewModel_FabClickDone;
    

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

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

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

    【讨论】:

    • 可能我有点晚了,但我的视图构造函数看不到 .FabClickDone 事件字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 2013-10-17
    • 2019-02-10
    • 1970-01-01
    相关资源
    最近更新 更多