我有以上情形:如果列表框的用户点击,它要么有子项(再次列表框)或详细视图。
所以我目前所做的是:每当用户点击任何项目,取得了网络电话,如果单击该项目还具有其他子项填补了相同的列表框。
现在,问题来的图片:
- 假如我是在第四屏(详细信息视图)
- 移动到第三和第二屏幕保持为堆栈数据(它的做工精细,是的,我维护数据
ObservableCollection<ObservableCollection<MyObjects>>
因此,虽然搬回,我从那里获取数据) - 现在,如果我在屏幕上点击2的任何项目,它会打开屏幕3 ListBox的数据详细视图。
意味着列表框是没有得到通知,我们内部的数据填充OnBackKeyPress()
仅供参考,我填补ListBox和web浏览器在同一页。 ,所以我的问题是,我怎么通知列表框一次,我填补了从堆栈我所维护的数据?
是的,我还实施INotifyPropertyChanged
,但不知道为什么它不工作。
请检查我的代码:
- 列表框和屏幕的WebView: http://pastebin.com/K1G27Yji
- RootPageItem类文件与执行
INotifyPropertyChanged
: http://pastebin.com/E0uqLtVG
抱歉,在上述的方式粘贴代码,我一样的问题正在长。
问题:
我要如何通知ListBox的数据是从改变OnBackKeyPress
?
什么是行为,如果你设置:
listBox1.ItemsSource = null;
之前
listBox1.ItemsSource = listRootPageItems;
这是错误的架构。 相反重装同一列表框,请为每个屏幕添加一个页面。 App类中它们之间共享数据(内部静态),并使用内置的导航堆栈处理“回去”。 不要覆盖OnBackKeyPress用于这一目的。
你会得到你想要的功能,“免费”与易于维护和使用的代码库。
哎呀,这是一个愚蠢的错误我犯了。
忘了设置项[]数组内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;
}
}