Windows Phone 7:ListBox中如何更新通知数据?

时间:2013-01-07 14:43:42

标签: windows-phone-7 windows-phone windows-phone-8

enter image description here

我有上面的场景:如果用户点击ListBox,它将有子项(再次列表框)或详细视图。

所以我目前所做的是:每当用户点击任何项目时,进行网络通话并填充相同的ListBox,如果点击的项目还有其他子项目。

现在,问题出现在图片中:

  1. 假设我在第4个屏幕(详细视图),
  2. 移动到第3和第2个屏幕,数据保持为堆栈(工作正常,是的我维护ObservableCollection<ObservableCollection<MyObjects>>中的数据,所以在回移时,我从那里获取数据)
  3. 现在,如果我点击屏幕2中的任何项目,它将打开屏幕3列表框数据的详细视图。
  4. 意味着ListBox未收到我们在OnBackKeyPress()

    中填写数据的通知

    仅供参考,我在同一页面填写了ListBox和WebBrowser。,所以我的问题是,一旦我从堆栈中填充数据,我如何通知ListBox?

    是的,我已经实施了 INotifyPropertyChanged ,但不知道为什么它无效。

    请检查我的代码:

    1. ListBox和WebView屏幕:http://pastebin.com/K1G27Yji
    2. RootPageItem类文件,其实现为INotifyPropertyChangedhttp://pastebin.com/E0uqLtVG
    3. 抱歉以上述方式粘贴代码,我的问题很长。

      问题:

      如何通知ListBox数据已从OnBackKeyPress更改?

3 个答案:

答案 0 :(得分:1)

如果你设置了什么行为:

listBox1.ItemsSource = null;

listBox1.ItemsSource = listRootPageItems;

答案 1 :(得分:1)

这是错误的架构。请为每个屏幕添加一个页面,而不是重新加载相同的列表框。在App类(内部静态)中共享它们之间的数据,并使用内置的导航堆栈来处理“返回”。不要为此目的覆盖OnBackKeyPress。

您将获得所需的“免费”功能,更易于维护和使用代码库。

答案 2 :(得分:1)

哎呀,这是一个愚蠢的错误。

我忘了在OnBackKeyPress()中设置items []数组但是在点击项目时访问,因此它有最后一步的items []数据我们向前移动,它正在执行相同的数据。

现在,我刚刚包含了一行,它解决了我的问题。

 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;
      }
 }