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

2019-10-17 13:10发布

我有以上情形:如果列表框的用户点击,它要么有子项(再次列表框)或详细视图。

所以我目前所做的是:每当用户点击任何项目,取得了网络电话,如果单击该项目还具有其他子项填补了相同的列表框。

现在,问题来的图片:

  1. 假如我是在第四屏(详细信息视图)
  2. 移动到第三和第二屏幕保持为堆栈数据(它的做工精细,是的,我维护数据ObservableCollection<ObservableCollection<MyObjects>>因此,虽然搬回,我从那里获取数据)
  3. 现在,如果我在屏幕上点击2的任何项目,它会打开屏幕3 ListBox的数据详细视图。

意味着列表框是没有得到通知,我们内部的数据填充OnBackKeyPress()

仅供参考,我填补ListBox和web浏览器在同一页。 ,所以我的问题是,我怎么通知列表框一次,我填补了从堆栈我所维护的数据?

是的,我还实施INotifyPropertyChanged ,但不知道为什么它不工作。

请检查我的代码:

  1. 列表框和屏幕的WebView: http://pastebin.com/K1G27Yji
  2. RootPageItem类文件与执行INotifyPropertyChanged : http://pastebin.com/E0uqLtVG

抱歉,在上述的方式粘贴代码,我一样的问题正在长。

问题:

我要如何通知ListBox的数据是从改变OnBackKeyPress

Answer 1:

什么是行为,如果你设置:

listBox1.ItemsSource = null;

之前

listBox1.ItemsSource = listRootPageItems;


Answer 2:

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

你会得到你想要的功能,“免费”与易于维护和使用的代码库。



Answer 3:

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

忘了设置项[]数组内OnBackKeyPress(),但同时点击项目,因此其具有项目[]我们在前进方向上移动的最后一步的数据,它被执行相同的数据被访问。

现在,我刚才包括一行,它已解决我的问题。

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


文章来源: Windows Phone 7: How to notify data is updated in ListBox?