首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ICommand Xamarin表单

ICommand Xamarin表单
EN

Stack Overflow用户
提问于 2018-05-19 17:18:29
回答 1查看 87关注 0票数 0

我遇到了一个奇怪的问题,那就是获取null异常。我创建了实现ICommand接口的类,我有两个方法。

代码语言:javascript
复制
public void Execute(object parameter)
{
    NavigateAsync();
}

private async void NavigateAsync()
{
    await App.MainNavigation.PushAsync(new Pages.SettingsPage());
}

当NavigateAsync()为exectude时,我的MainNavigation始终为null,即使我可以看到Execute中的参数已设置。

在我的App.xaml.cs文件中,我创建了公共静态INavigation MainNavigation { get;set;}

代码语言:javascript
复制
public partial class App : Application
    {
        public static ViewModels.MainViewModel ViewModel { get; set; }
        public static INavigation MainNavigation { get; set; }

        public App ()
        {
            InitializeComponent();

            MainPage = new NavigationPage(new Paperboy.MainPage());
        }

        protected override void OnStart ()
        {
            // Handle when your app starts
        }

        protected override void OnSleep ()
        {
            // Handle when your app sleeps
        }

        protected override void OnResume ()
        {
            // Handle when your app resumes
        }
    }

单击图标时,我可以看到命令已执行,但NavigateAsync()中的App.MainNavigation为空。因此,命令不会对SettingsPage执行PushAsync。

EN

回答 1

Stack Overflow用户

发布于 2018-05-21 03:35:34

你从来没有实例化你的static MainNavigation属性...如果我可以给你两句话:

  • 而不是使用在服务中声明的静态属性,也许更好的实现方法是将导航getter嵌入到特定的“App.xaml.cs”类中,或者直接嵌入到命令定义中:

公共类MyCommand : ICommand { ... //导航getter //这个属性有更好的地方,但//比app.xaml.cs私有INavigation MainNavigation { get => Application.Current?.MainPage?.Navigation;} public void Execute(object参数){ NavigateAsync();} private async void NavigateAsync() { try { await MainNavigation?.PushAsync( Pages.SettingsPage());} catch(){ ... }

  • 另一点我想注意的是,你的命令看起来像异步的。也许你已经知道了,但是这里有一个很好的异步命令的实现,可以避免应用程序崩溃:Asynchronous commands

我希望它能帮助你。祝你编码愉快!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50423692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档