是否可以在 xamarin 表单中访问从第一页到第二页的进度条?

Is it Possible to access progress bar from first page to second page in xamarin forms?

是否可以这样做:

我在第一页有一个进度条,我将它设置为 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();
}

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

是的,您可以为此使用 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 中找到文档。

Is it possible to start the progress bar in page1 from page2?

是的,除了下面的答案外,您还可以使用 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而不是这种方式