Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用PopAsync将数据传递到上一页?_C#_Xamarin_Xamarin.forms - Fatal编程技术网

C# 如何使用PopAsync将数据传递到上一页?

C# 如何使用PopAsync将数据传递到上一页?,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,考虑以下场景: 用户位于第1页的某个位置 他单击按钮将他移动到第2页(调用等待导航.PushAsync(newsomePage());) 完成某些操作后,他单击“确定”按钮 单击“确定”后,应用程序调用PopAsync移动到第1页,并向该页发送一些数据(第2页上的活动结果) 如何从第1页的第2页接收数据?最好的方法(IMO)是通过引发事件来处理来自原始页面的pop。大概是这样的: public class LoginPage : ContentPage { public event Ev

考虑以下场景:

  • 用户位于第1页的某个位置
  • 他单击按钮将他移动到第2页(调用
    等待导航.PushAsync(newsomePage());
  • 完成某些操作后,他单击“确定”按钮
  • 单击“确定”后,应用程序调用PopAsync移动到第1页,并向该页发送一些数据(第2页上的活动结果)
  • 如何从第1页的第2页接收数据?

    最好的方法(IMO)是通过引发事件来处理来自原始页面的pop。大概是这样的:

    public class LoginPage : ContentPage
    {
        public event EventHandler LoginSucceeded;
    
        public event EventHandler LoginFailed;
    
        private void OnLoginSucceeded()
        {
            if (LoginSucceeded != null)
            {
                LoginSucceeded(this, EventArgs.Empty);
            }
        }
    
        private void OnLoginFailed()
        {
            if (LoginFailed != null)
            {
                LoginFailed(this, EventArgs.Empty);
            }
        }
    }
    
    来自app.cs

    public class App : Application
    {
        public App()
        {
            var loginPage = new LoginPage();
            loginPage.LoginSucceeded += HandleLoginSucceeded;
            MainPage = loginPage;
        }
    
        private void HandleLoginSucceeded(object sender, EventArgs e)
        {
            MainPage = new MainPage();
        }
    }
    
    你可以在上面读到更多关于它的文章——非常好的文章


    另一种选择是使用MessagingCenter,您可以在同一页面上使用我的答案或Sushingover的答案

    我的答案将在
    ContentPage
    中起作用,寿司宿醉将在任何地方起作用

    我的答案是在执行
    PushAsync()
    之前,先订阅第1页的
    ContentPage.OnDisappearing


    如果正在更改的数据保存到第2页的数据库中,您可以使用第1页的
    OnAppearing()
    事件始终从数据库中提取新数据,这将提取在第2页更改的新数据<代码>OnAppearing()将在弹出第2页且用户返回到第1页后执行。

    是否使用ViewModels?以何种方式?为什么?如果你使用的是与页面关联的ViewModels,那么在页面之间共享数据就很容易了。看起来很有趣。如果我不在从“应用程序”扩展而来的类中,是否可以这样做?我的意思是:我的第1页(我想从那里启动第2页)是ContentPage,其中没有类似MainPage变量的内容。是的,这是可能的。