是否可以在 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而不是这种方式
是否可以这样做:
我在第一页有一个进度条,我将它设置为 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而不是这种方式