2011-10-27 3 views
0

OK、私のアプリは機能します。ピボットアイテムを切り替えると表示されるパフォーマンスが嫌いです。私はランダムに吃音やハングアップを取得します。私はWeb開発の背景から来て以来、私は本当にスレッドで吸う。私のアプリを高速化するために何かできることはありますか?WP7ピボットコントロールのパフォーマンスは私にとってはスムーズではありません

ここで私の「ツイスト」からメインページへの切り替えがあります。アプリ。 「ウォッチリスト」と「マイリスト」の項目を切り替えると最大のハングアップが発生します。

private void panTwist_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) 
    { 
     switch (panTwist.SelectedIndex) 
     { 
      case 0:  //Watch List 
       App.vmTweet.LoadMore = false; 
       DataContext = App.vmTweet; 


       if (!App.vmTweet.IsWatchListTweetsLoaded) 
       { 
        LoadWatchList(false);  
       } 
       break; 
      case 1:   //menu 
       ApplicationBar = null; 
       SetMenuDisplay(); 
       break; 
      case 2:   //My Lists 

       ApplicationBar = null; 
       DataContext = App.vmTwitterList; 
       if (!App.vmTwitterList.IsMyListsLoaded) 
       { 
        GetMyLists(); 
       } 
       MyListsSetDisplay(); 
       break; 
      default: 

       break; 
     } 

    } 

私の「Wiki-Reef」アプリのコードは次のとおりです。これはもっと悪いことに実行されます....

private void panCorals_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     switch (panCorals.SelectedIndex) 
     { 
      case 0:  //search corals 

       break; 
      case 1:   //top corals 
       if (!App.vmCoral.IsTopDataLoaded) 
       { 
        App.vmCoral.IsTopLoading = true; 
        if (App.HasConnectivity) 
        { 
         //get corals from web 
         App.vmCoral.GetTopCorals(); 

        } 
        else 
        { 
         //get saved corals from device 
         MessageBox.Show("Your phone does not have a connection to the internet, so the results you see could be empty or outdated."); 
         App.vmCoral.GetSavedTopCorals(); 
        } 
       } 
       break; 
      case 2:   //new corals 

       if (!App.vmCoral.IsNewDataLoaded) 
       { 
        App.vmCoral.IsNewLoading = true; 
        if (App.HasConnectivity) 
        { 
         //get corals from web 
         App.vmCoral.GetNewCorals(); 

        } 
        else 
        { 
         //get saved corals from device 
         MessageBox.Show("Your phone does not have a connection to the internet, so the results you see could be empty or outdated."); 
         App.vmCoral.GetSavedNewCorals(); 
        } 
       } 

       break; 
      default: 

       break; 
     } 

    } 
+2

何をするLoadWatchList?それにはリモート呼び出しが含まれているのか、ローカルストレージからロードするだけですか? LoadWatchListとGetMyListsをコメントアウトすると、ピボットが滑らかになりますか?はい=>これらのメソッドを最適化する=>より多くのコードが必要です... –

+0

以下の私のコメントを参照して、問題を引き起こしている行thats任意のDataContext = xyz; – Jarrette

答えて

1

DataContextをリセットしないでください。

このコードを使用してください。これはMVVM(http://msdn.microsoft.com/en-us/magazine/dd419663.aspxを参照)に従い、DataContextをリセットしません。

ビューモデル:背後

public class MainPageViewModel 
{ 
    public MainPageViewModel() 
    { 
     ItemsOfPivotOne = new ObservableCollection<ItemOfPivotOne>(); 
     ItemsOfPivotTwo = new ObservableCollection<ItemOfPivotOne>(); 
    } 

    public void LoadPivotOne() 
    { 
     // add your http logic here and add elements like this: 
     ItemsOfPivotOne.Add(item); 
    } 

    public void LoadPivotOne() 
    { 
     // add your http logic here and add elements like this: 
     ItemsOfPivotTwo.Add(item); 
    } 

    public ObservableCollection<ItemOfPivotOne> ItemsOfPivotOne {get; set;} 
    public ObservableCollection<ItemOfPivotTwo> ItemsOfPivotTwo {get; set;} 
} 

ページコード:リソースによって、ビューモデルのインスタンス化と

public class MainPage 
{ 
    public MainPageViewModel Model { get { return (MainPageViewModel)Resources["viewModel"]; } } 

    private void PivotSelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     switch (panTwist.SelectedIndex) 
     { 
      case 0: 
       Model.LoadPivotOne(); 
       break; 
      case 1: 
       Model.LoadPivotTwo(); 
       break; 
     } 
    } 
} 

XAMLコード:

<phone:PhoneApplicationPage x:Class="MyNamespace.MainPage" ... > 
    <phone:PhoneApplicationPage.Resources> 
     <viewModels:MainPageViewModel x:Key="viewModel" /> 
    </phone:PhoneApplicationPage.Resources> 

    <Grid x:Name="LayoutRoot" DataContext="{StaticResource viewModel}"> 
     <controls:Pivot Title="MY APPLICATION"> 
      <controls:PivotItem Header="Pivot 1"> 
       <ListBox ItemsSource="{Binding ItemsOfPivotOne}" /> 
      </controls:PivotItem> 
      <controls:PivotItem Header="Pivot 2"> 
       <ListBox ItemsSource="{Binding ItemsOfPivotTwo}" /> 
      </controls:PivotItem> 
     ... 

私はこれが役に立てば幸い...そうでない場合はここに私に尋ねなさい...

1

私はこれにリコに同意します。これはあなたのリモートコール(Webサービスへの呼び出し)のように聞こえます。その場合、WebClientではなくHttpWebRequestを使用してください。 WebClientを使用すると、UIスレッドがブロックされます。 ストレートMSDNがWebクライアント使用に関するから:

「を処理乏しいユーザエクスペリエンスを引き起こし、完了するまでUIは、処理されるデータのセットが大きい場合は特に、応答しなくなります。」

ここにはlinkがあります。あなたがそのページに含まれているアプリケーションのパフォーマンスを向上させるためのヒントを含んでいるので、私はすべてを読むことをお勧めします。

+0

私はピボットアイテムを切り替えるときに何が "吃音"を作り出しているのかを考え出しました。 DataContext = App.vmTwitterListです。ライン。私がdatacontext行をコメントアウトすると、アプリは他のメソッド呼び出しでもシルクとして滑らかに実行されます...しかし、今はその情報で何をすべきかわかりません。 – Jarrette

関連する問題