1

ここに画像の説明を入力

上記のシナリオがあります: ユーザーが ListBox をクリックすると、サブ項目 (再び ListBox) または詳細ビューのいずれかが表示されます。

私が現在行ったことは次のとおりです。ユーザーがアイテムをクリックするたびに、Web呼び出しを行い、クリックしたアイテムにさらにサブアイテムがある場合は同じListBoxを埋めました。

さて、問題は次のとおりです。

  1. 4 番目の画面 (詳細ビュー) にいるとします。
  2. データがスタックとして維持された状態で 3 番目と 2 番目の画面に移動しました (正常に動作しています。はい、データを維持してObservableCollection<ObservableCollection<MyObjects>>いるため、移動中にそこからデータを取得しています)
  3. ここで、画面 2 の任意の項目をクリックすると、画面 3 の ListBox データの詳細ビューが開きます。

内部にデータが入力されたことが ListBox に通知されないことを意味しますOnBackKeyPress()

参考までに、同じページに ListBox と WebBrowser を埋めています。、だから私の問題は、私が維持しているスタックからデータをいっぱいにしたら、ListBoxにどのように通知するのですか?

はい、私も実装しINotifyPropertyChangedましたが、なぜ機能しないのかわかりません。

私のコードを確認してください:

  1. ListBox と WebView 画面: http://pastebin.com/K1G27Yji
  2. 実装された RootPageItem クラス ファイルINotifyPropertyChanged: http://pastebin.com/E0uqLtVG

上記の方法でコードを貼り付けて申し訳ありませんが、質問が長いので貼り付けました。

問題:

データが から変更されたことを ListBox に通知するにはどうすればよいOnBackKeyPressですか?

4

3 に答える 3

1

これは間違ったアーキテクチャです。同じリストボックスをリロードする代わりに、画面ごとに1つのページを追加してください。Appクラス(内部静的)内でそれらの間でデータを共有し、「戻る」を処理するために組み込みのナビゲーションスタックを使用します。この目的のためにOnBackKeyPressをオーバーライドしないでください。

コードベースの保守と使用が簡単で、必要な機能を「無料」で入手できます。

于 2013-01-07T21:30:48.470 に答える
1

おっと、それは私が犯したばかげた間違いでした。

OnBackKeyPress() 内に items[] 配列を設定するのを忘れていましたが、アイテムをクリックしながらアクセスしていたため、前方に移動した最後のステップの items[] データがあり、同じデータを実行していました。

今、私はたった1行を含めただけで、私の問題は解決しました。

 items = listRootPageItems.ToArray();  // resolution point

onBackKeyPress() の最終的なコードは次のとおりです。

/**
 * While moving back, taking data from stack and displayed inside the same ListBox
 * */
 protected override void OnBackKeyPress(CancelEventArgs e)
 {
     listBox1.Visibility = Visibility.Visible;
     webBrowser1.Visibility = Visibility.Collapsed;
     listBox1.SelectedIndex = -1;

     if (dataStack.Count != 0)
     {
          listBox1.ItemsSource = null;
          listRootPageItems = dataStack[dataStack.Count-1];
          listBox1.ItemsSource = listRootPageItems;

               items = listRootPageItems.ToArray();  // resolution point
          dataStack.Remove(listRootPageItems);

          e.Cancel = true;
      }
 }
于 2013-01-08T12:54:52.043 に答える
1

そして、あなたが設定した場合の動作は何ですか:

listBox1.ItemsSource = null;

listBox1.ItemsSource = listRootPageItems;
于 2013-01-07T19:10:44.100 に答える