我有一个带有 Telerik 数据绑定列表框的 C# Windows Phone 7 应用程序。数据绑定列表框的 ItemsSource 属性绑定到我的视图模型中的一个属性,该属性从 RESTful Web 服务中检索其内容。只读属性的逻辑如下:
List 属性是否为空(首次使用)?
^ 返回一个空列表
^ 异步检索列表内容
^ 检索完成时引发属性更改事件
它工作正常,现在我想在异步操作正在进行时显示进度叠加。我正在使用 Coding4Fun 工具包的进度覆盖控件。问题是我不知道在哪里“插入”正确的代码来显示和隐藏进度覆盖。我尝试从下面的视图模型中执行此操作(请参见下面的代码),但进度覆盖不可见。我猜那是因为它没有正确地作为当前可见的应用程序页面的父级?
如何正确显示进度叠加?请注意,如果有一个很好的 XAML 方法可以做到这一点,我想知道,否则我会尽我所能。
/// <summary>
/// Does the async load of the list we return to the data bound contro.
/// </summary>
///
async private void LoadListContentsAsync()
{
bool bIsProgOverlayShowing = false;
if (!IsLoadingList)
{
// Set the busy flag.
IsLoadingList = true;
Coding4Fun.Toolkit.Controls.ProgressOverlay po = new Coding4Fun.Toolkit.Controls.ProgressOverlay();
po.Content = "Loading List";
po.Show();
// Set the cleanup flag for the progress overlay.
bIsProgOverlayShowing = true;
try
{
// Do the asynchronous load.
List<string> bl = await this.GetListContentsAsync();
_listContents = bl.ToObservableCollection();
// Raise the property changed event handler.
RaisePropertyChanged("ListContents");
}
finally
{
// Make sure the loading flag is cleared.
IsLoadingList = false;
// Hide the progress overlay if it is showing.
if (bIsProgOverlayShowing)
po.Hide();
}
} // if (!IsLoadingList)
} // async private void LoadListContentsAsync()