首先,我从数据库中读取条目列表并将其显示在ListView中。当我离开页面以显示条目的详细信息,然后返回列表时,一切都是正常的。
接下来,我打开另一个页面,向数据库中添加一个条目。
返回到列表,从数据库中读取数据会显示正确的计数。
当我要显示一个详细信息时,正确的计数存储在SaveState中。
回到列表,LoadState给出了错误的计数。这是以前的州。
“显示其他详细信息”和“立即返回”适用于旧列表,并且不向我显示添加的条目。
这是我的代码:
private void getList()
{
memoList = new List<MemoItem>();
db.loadHistory(ref memoList);
DelButton.IsEnabled = false;
System.Diagnostics.Debug.WriteLine("GetList, memoList[{0}]", memoList.Count);
}
private void NavigationHelper_SaveState(object sender, SaveStateEventArgs e)
{
if (memoList != null)
{
e.PageState["MemoItem"] = memoList;
if (memoSelected > -1)
e.PageState["memoSelected"] = memoSelected;
System.Diagnostics.Debug.WriteLine("SaveState, memoList[{0}]", memoList.Count);
}
}
private void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
if (e.PageState != null)
{
if (e.PageState.ContainsKey("MemoItem"))
{
memoList = (List<MemoItem>)e.PageState["MemoItem"];
System.Diagnostics.Debug.WriteLine("LoadState, memoList[{0}]", memoList.Count);
if (e.PageState.ContainsKey("memoSelected"))
memoSelected = (int)e.PageState["memoSelected"];
MemoListView.ItemsSource = memoList;
MemoListView.Visibility = Visibility.Visible;
}
else
{
getList();
showList();
}
}
}以下是()中带有注释的Systems.Diagnostic输出:
GetList,memoList8
SaveState,memoList8
LoadState,memoList8
SaveState,memoList8
GetList,memoList9
SaveState,memoList9
LoadState,memoList8
SaveState,memoList8
LoadState,memoList8
备注:我不能每次都从数据库中调用GetList,因为我必须在列表中保留未包含在数据库中的复选标记。
我的代码出了什么问题?如何解决此问题?从数据库中获取新列表后,如何使StateEvent数据失效?
发布于 2014-08-17 17:33:12
现在问题已经解决了。这实际上是后台堆栈操作的结果。
我的程序中有四个基本页面,对于这些页面来说,GoBack是有意义的。但我不想回到更深的地方。(我不认为任何人都想倒退20步或更多步骤,但看似无限的BackStack将允许that.The所需的内存消耗不可忽略。)
为了在选择一个基本页面时清除BackStack,我设置了以下内容:
private void NavButton_Click(object sender, RoutedEventArgs e)
{
Button b = sender as Button;
if (b != null && b.Tag != null)
{
Type pageType = Type.GetType(b.Tag.ToString());
if (pageType != null)
{
if (rootFrame.CurrentSourcePageType != pageType)
{
rootFrame.Navigate(pageType, rootFrame);
// No goBack for Basic Pages
if (testBasicPage(pageType))
{
while (rootFrame.BackStackDepth > 1)
{
rootFrame.BackStack.RemoveAt(0);
}
}
}
}
}
}在我遇到SaveState / Load State的问题之前,它工作得很好。
现在,我首先清空BackStack,然后导航到目标页面。这是可行的。
private void NavButton_Click(object sender, RoutedEventArgs e)
{
Button b = sender as Button;
if (b != null && b.Tag != null)
{
Type pageType = Type.GetType(b.Tag.ToString());
if (pageType != null)
{
if (rootFrame.CurrentSourcePageType != pageType)
{
// No goBack for Basic Pages
if (testBasicPage(pageType))
{
while (rootFrame.BackStackDepth > 0)
{
rootFrame.BackStack.RemoveAt(0);
}
}
rootFrame.Navigate(pageType, rootFrame);
}
}
}
}https://stackoverflow.com/questions/25321174
复制相似问题