从一个页面到下一个页面,有一个属性绑定在UI中,这个比例需要花费一个浪费时间操作,所以页面不会很长时间,有没有办法改进速度。
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e) {
string value = string.Empty;
IDictionary<string, string> queryString = this.NavigationContext.QueryString;
if (queryString.ContainsKey("Type"))
{
this.Type = queryString["Type"];
new Thread(() => {
mtv.AddDistanceForList();
}).Start();
}
else
{
GetMovieThreater();
}
base.OnNavigatedTo(e); }
private void GetMovieThreater() {
string movieId = PhoneApplicationService.Current.State["MovieId"] as string;
mtv.SelectThreaterByMovie(movieId);
mtv.AddDistanceForList(); }
在这样的View模型中:
private ObservableCollection<Threater> threaters; public ObservableCollection<Threater> Threaters {
get { return threaters; }
set
{
if (threaters != value)
{
threaters = value;
NotifyPropertyChanged("Threaters");
}
} }
private CollectionViewSource filteredThreater; public CollectionViewSource FilteredThreater {
get { return filteredThreater; }
set
{
filteredThreater = value;
NotifyPropertyChanged("FilteredThreater");
} } This function wate time!!! public void SelectThreaterByMovie(string movieId) {
Threaters.Clear();
if(MovieDataAllMovies.Threaters!=null)
{
foreach(var i in MovieDataAllMovies.MoviePlans){
if (i.MovieId == movieId)
{
MovieDataAllMovies.Threaters.ForEach((e) =>
{
if (i.TheaterId == e.Tid.ToString())
{
Threaters.Add(e);
}
});
}
}
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
this.FilteredThreater.Source = Threaters;
}); } }
答案 0 :(得分:0)
在与文章页面底部的示例代码进行长时间运行的Web服务调用available here进行交互时,有一篇关于如何使用性能进度条处理此类情况的非常好的文章。
引用丹·克拉克的话,“我非常希望在我的Windows Phone 7应用程序中拥有一个全球性的绩效进度条,这样当我与网络服务交互时,用户就有了一致的参考框架。要求很简单,一个进步所有页面上都显示没有任何特殊要求的栏(即没有自定义控件,特殊代码片段等)。它应该在一个地方进行管理,并且易于扩展。幸运的是,Silverlight提供的极大灵活性使这一点变得轻而易举: “Source
此选项至少可以让您使用该页面正在加载的想法。