【问题标题】:Is it Possible to access progress bar from first page to second page in xamarin forms?是否可以在 xamarin 表单中从第一页到第二页访问进度条?
【发布时间】:2020-07-24 06:49:43
【问题描述】:

是否可以这样做:

我在第一页有一个进度条,我将它设置为 IsVisible = false

我在第一页创建了一个依赖方法

[assembly:Dependency(typeof(page.view.FirstPage))]
public interface Progress
{
    void StartProgress();
}

public partial class FirstPage : ContentPage
{
    public FirstPage()
    {

    }

    public void StartProgress()
    {
        //do progression here
          and set Progress bar 
           IsVisible = true;
    }
}

并访问FirstPage到SecondPage的方法

例如我在第二页有一个按钮

private void Onpress(s, e)
{
    DependencyService.Get<Progress>().StartProgress();
    Navigation.PopToRootAsync();
}

然后第一页的进度条将开始运行....但是我的代码不起作用

【问题讨论】:

    标签: c# xamarin xamarin.forms progress-bar


    【解决方案1】:

    是的,您可以为此使用 MessagingCenter。在您的第一页,订阅一条消息:

          public FirstPage()
           {
             MessagingCenter.Subscribe<SecondPage>(this, "StartProgress", (sender) =>
              {
               StartProgress();
              }); 
            }
        
            public void StartProgress()
            {
                //do progression here
                //and set Progress bar 
                   IsVisible = true;
            }
    

    然后在您的第二页发送消息:

     private void Onpress(s, e)
    {
       MessagingCenter.Send(this, "StartProgress");
        Navigation.PopToRootAsync();
    }
    

    您可以在here 中找到文档。

    【讨论】:

      【解决方案2】:

      是否可以从page2开始page1中的进度条?

      是的,除了下面的答案,您还可以使用Commands 来执行此操作

      Page1.Xaml

      <StackLayout VerticalOptions="CenterAndExpand">
          <ProgressBar
              x:Name="ProgressBar1"
              Progress="1"
              ProgressColor="Red"
              IsVisible="False" />
          <Button Clicked="Button_OnClicked" Text="Click here"/>
      </StackLayout>
      

      Page1.Cs

          public static Command StartProgressCommand;
          public Page1()
          {
              InitializeComponent();
              StartProgressCommand = new Command(() => { ProgressBar1.IsVisible = true; });
          }
          private void Button_OnClicked(object sender, EventArgs e)
          {
             Navigation.PushModalAsync( new Page2());
          }
      

      Page2.Xaml

          <StackLayout VerticalOptions="EndAndExpand">
              <Button Clicked="Button_OnClicked"  Text="Start Progress"/>
          </StackLayout>
      

      Page2.Cs

         private void Button_OnClicked(object sender, EventArgs e)
          {
              Page1.StartProgressCommand.Execute(null);
              Navigation.PopModalAsync(true);
          }
      

      注意:最好使用Mvvm pattern 来代替这种方式

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-31
        • 1970-01-01
        • 1970-01-01
        • 2020-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-03
        相关资源
        最近更新 更多