【问题标题】:Calling method from ViewModel cause System.NullReferenceException从 ViewModel 调用方法导致 System.NullReferenceException
【发布时间】:2021-03-14 03:03:39
【问题描述】:

我是 Xamarin.Forms 的新手,我正在开发一个跨平台的应用程序。在应用程序中,用户需要登录 Facebook 和 Twitter 才能参与某些特定活动。于是我在设置页面设​​置了静态登录功能,加入活动页面。每次用户打开设置页面时,我都需要检查登录是否成功并在页面上显示用户名。所以我决定在后面的代码中调用检查方法,在 OnAppearing 方法中。但它会调用 NullReferenceException。如果我只是从检查方法中移动了整个代码,设置页面上没有任何变化。

这是我的代码:

    public SettingAct()
    {
        InitializeComponent();
    }

    protected override void OnAppearing()
    {
        (BindingContext as SettingViewModel).CekLogin();
    }

我的 ViewModel 上的检查方法:

    internal void CekLogin()
    {
        Console.WriteLine("LoginCheck");
        if (SessionManager.FacebookLogin())
        {
            FacebookName = SessionManager.FacebookName();
            FbImage = "fb_sett_active.png";
            Console.WriteLine("Facebook logged in");
        }
        else
        {
            FacebookName = "Facebook";
            FbImage = "fb_sett.png";
            Console.WriteLine("Facebook not logged in");
        }

        if (SessionManager.TwitterLogin())
        {
            TwitterName = SessionManager.TwitterName();
            TwitImage = "twitter_sett_active.png";
            Console.WriteLine("Twitter logged in");
        }
        else
        {
            TwitterName = "Twitter";
            TwitImage = "twitter_sett.png";
            Console.WriteLine("Twitter not logged in");
        }
    }

我很困惑为什么它不起作用,因为我在我的主页上做同样的事情,每次主页出现时我都会刷新用户点。

   (BindingContext as MainViewModel).RefreshKuliahLogPoint();

如果您需要任何详细信息,请在评论中告诉我,我希望即使我的英语不好,您也能理解我的问题。

【问题讨论】:

  • 您是否在代码隐藏或 xaml 中设置了BindingContext
  • 在我的 xaml 中,ContentPage.BindingContext 标记。
  • 你能把样本分享到 github 以便我可以在我这边测试它

标签: xamarin xamarin.forms mvvm cross-platform nullreferenceexception


【解决方案1】:

BindingContext 属性将返回 null,直到您实际将其设置为某个值。

public SettingAct()
{
    InitializeComponent();
    BindingContext = new SettingViewModel();
}

protected override void OnAppearing()
{
    (BindingContext as SettingViewModel).CekLogin();
}

【讨论】:

  • 我在我的 XAML 文件中设置了 BindingContext。不好吗?顺便说一句,您的代码中有两个分号。编辑:在实施您的建议后,我仍然得到 NullReferenceException(错误:在 OnAfterSave 中捕获异常 290),但我的代码仍然有效。好吗?
猜你喜欢
  • 2017-02-18
  • 2021-01-19
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多