首先,我对Windows Phone 8 的开发经验不是很丰富,但有些东西看起来像我比较熟悉的ASP.NET Framework。
我想要一个不确定的进度条,它在后台执行 Web 请求时显示,并在处理请求时隐藏。
我的解决方案有效,但我对它不满意
(progressBar/Text 在一个枢轴元素内以测试功能)
我们有以下内容:
一个名为“MainPage”的 XAML 页面,带有 Pivot 元素。
<phone:PhoneApplicationPage>
...
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!-- HERE I want the progress bar and loading-text to show up if possible -->
<TextBlock Name="ProgressText" Text="Loading..." Visibility="Collapsed"/>
<ProgressBar Name="ProgressBar" Visibility="Collapsed" IsIndeterminate="True"/>
<!-- HERE I want the progress bar and loading-text to show up if possible -->
<phone:Pivot Title="MyTitle">
<!-- Here are my PivotItems -->
</phone:Pivot>
</Grid>
<phone:PhoneApplicationPage>
我的代码隐藏如下所示:
protected override void OnNavigatedTo(
App.ViewModel.LoadSomething();
}
函数 LoadSomething() 显示/隐藏进度条和加载文本。
这是我不满意的部分:
// Method of the ViewModel
public void LoadSomething()
{
//Showing progress bar and loading-text
var mainPage = (MainPage)App.RootFrame.Content;
mainPage.ProgressBar.Visibility = Visibility.Visible;
mainPage.ProgressText.Visibility = Visibility.Visible;
// form the URI
UriBuilder fullUri = new UriBuilder(string.Format("http://somepage..."));
// initialize a new WebRequest
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(fullUri.Uri);
// set up the state object for the async request
UpdateState state = new UpdateState();
state.AsyncRequest = request;
// start the asynchronous request
request.BeginGetResponse(
new AsyncCallback(HandleResponse),
state);
}
private void HandleResponse(IAsyncResult asyncResult)
{
// Here happens logic and stuff
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
// Here happens logic and stuff
//Hiding progress bar and loading-text
var mainPage = (MainPage)App.RootFrame.Content;
mainPage.ProgressBar.Visibility = Visibility.Collapsed;
mainPage.ProgressText.Visibility = Visibility.Collapsed;
});
}
所以现在我的问题:
是否可以在我导航到的任何枢轴元素上显示进度条和加载文本?
如您所见,通过引用“(MainPage)App.RootFrame.Content”,我可以访问我的 Progress-Bar/Text 对象并简单地设置属性。但我不喜欢这种方式。
我认为必须有一种方法可以使用 {Binding ...} 值设置进度条/文本,从而使代码更清晰。因此,如何绑定 ProgressBar 和 ProgressText 的属性“可见性”,以便它们在 LoadSomething() 开始时变为“可见”,并在处理完成时变为“折叠”?
提前致谢!
亲切的问候