如何从Xamarin Android Activity中调用MvxViewModel?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从Xamarin Android Activity中调用MvxViewModel?相关的知识,希望对你有一定的参考价值。

如何从我的xamarin android MvxViewModel课程中调用Activity?在我的情况下,我不能像local: MvxBind=" Click MethodFromMvxViewModel"那样去MvxViewModel

所以我的情况是:

我有Facebook登录。在我的活动中,我尝试登录时有两个选项。如果用户通过他的Facebook帐户发送电子邮件,我会收到一些关于用户的信息,并希望将其保存到数据库中,如果用户没有Facebook帐户中的电子邮件,我会打开新的内容视图与表单填写电子邮件,然后按保存按钮,按下保存按钮后我需要将用户保存到数据库。

活动代码:

[Activity(Label = "Facebook login")]
class FacebookLoginView : MvxActivity, IFacebookCallback, GraphRequest.IGraphJSONObjectCallback
{
    private LoginButton loginButton;
    private ICallbackManager callbackManager;

    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        RequestWindowFeature(WindowFeatures.NoTitle);
        SetContentView(Resource.Layout.FacebookLoginView);

        loginButton = FindViewById<LoginButton>(Resource.Id.loginButton1);
        loginButton.SetReadPermissions(new string[] { "user_friends", "email" });
        callbackManager = CallbackManagerFactory.Create();
        loginButton.RegisterCallback(callbackManager, this);
    }

    protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
    {
        base.OnActivityResult(requestCode, resultCode, data);
        callbackManager.OnActivityResult(requestCode, (int)resultCode, data);
    }

    public void OnCancel()
    {
        //Does nothing, just closes facebook login screen
    }

    public void OnError(FacebookException error)
    {
        //For now does nothing
    }

    public void OnSuccess(Java.Lang.Object result)
    {
        var loginresult = result as LoginResult;

        GraphRequest graphRequest = GraphRequest.NewMeRequest(loginresult.AccessToken, this);
        graphRequest.Parameters.PutString("fields", "id,name,email");
        graphRequest.ExecuteAsync();

        SetContentView(Resource.Layout.SlideListView);
    }

    public void OnCompleted(JSONObject @object, GraphResponse response)
    {
        var facebookId = (long)@object.Get("id");
        var email = @object.Get("email").ToString();

        if (string.IsNullOrEmpty(email))
        {               
            SetContentView(Resource.Layout.CompleteRegistrationView);
            //GetEmail from form
        }
        //save user
    }
}

在最后一个方法OnCompleted我想打电话给MvxViewModel并给他发电子邮件和facebookId。我怎样才能从Activity那里做到这一点?

答案

如果您使用通用MvxActivity<MyViewModel>,您将能够在ViewModel上调用任何方法。

public void OnCompleted(JSONObject @object, GraphResponse response)
{
    var facebookId = (long)@object.Get("id");
    var email = @object.Get("email").ToString();

    if (string.IsNullOrEmpty(email))
    {               
        SetContentView(Resource.Layout.CompleteRegistrationView);
        //GetEmail from form
    }
    //save user
    ViewModel.SaveUserMethod(object);
}

以上是关于如何从Xamarin Android Activity中调用MvxViewModel?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C++ 为 Xamarin.Android 创建 C# DLL

如何从xamarin表单应用程序中的PCL项目访问android原生布局文件?

如何在 Android 上管理从后台恢复的 Xamarin 表单应用程序?

如何从 Xamarin Forms 项目调用 Android 和 iOS 项目中可用的方法?

如何使用 Xamarin.Forms/C# 将 mp3 从 youtube 下载到 android?

如何从 Uri xamarin android 获取实际路径