我无法解决这个奇怪的问题,我已经尝试过任何我能想到的事情。
我有5页,每个人都用这种方式传递变量:
通过:
NavigationSerice.Navigate(new Uri("/myPage.xaml?key=" + myVariable, UriKind.Relative));
提取:
If (NavigationContext.QueryString.ContainsKey(myKey))
{
String retrievedVariable = NavigationContext.QueryString["myKey"].toString();
}
我在许多页面上打开一个列表,其中一个页面会自动从列表actualProject中删除一个项目(actualProject是一个字符串列表的变量)。然后,当我走到目前为止,我到达一个特定的页面 - 该应用程序抛出异常。为什么?我不知道。
删除项目的代码:
// Remove the active subject from the availible subjects
unlinkedSubjects.Remove(actualSubject);
unlinkedsubjectsListBox.ItemsSource = null;
unlinkedsubjectsListBox.ItemsSource = unlinkedSubjects;
然后抛出异常的OnNavigatedTo事件的页面:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (NavigationContext.QueryString.ContainsKey("key"))
{
actualProject = NavigationContext.QueryString["key"];
try
{
//Read subjectList from IsolatedStorage
subjectList = readSetting(actualProject) != null ? (List<String>)readSetting(actualProject) : new List<String>();
//Put the subjectList into the subjectListBox
subjectListBox.ItemsSource = subjectList;
//Set the subjectsPageTitle to the "actualProject" value, to display the name of the current open project at the top of the screen
subjectsPageTitle.Text = actualProject;
}
catch (Exception)
{
if (language.Equals("en."))
{
// Language is set to english
MessageBox.Show("Couldn't open the project, please try again or please report the error to Accelerated Code - details on the about page");
}
else if (language.Equals("no."))
{
// Language is set to norwegian
MessageBox.Show("Kunne ikke åpne prosjektet, vennligst prøv igjen eller rapporter problemet til Accelerated Code - du finner detaljer på om-siden");
}
}
}
}
例外:
我的理论: 应用程序类型加载当前打开和修改的列表。那可能吗?不知道。
答案 0 :(得分:1)
因此,有许多方法可以在页面之间传递数据。
您选择的方式是最少建议的。
You can use the PhoneApplicationService.Current dictionary但如果您有大量变量,在应用程序关闭后仍然存在并且可以简化,这也很麻烦。
我编写了一个免费的DLL,它将这个确切的场景保持为EZ_iso。
基本上你要做的就是这个。
[DataContractAttribute]
public class YourPageVars{
[DataMember]
public Boolean Value1 = false;
[DataMember]
public String Value2 = "And so on";
[DataMember]
public List<String> MultipleValues;
}
完成课程设置后,您可以在页面之间轻松传递
YourPageVars vars = new YourPageVars { /*Set all your values*/ };
//Now we save it
EZ_iso.IsolatedStorageAccess.SaveFile("PageVars",vars);
就是这样!现在您可以导航和检索文件。
YourPageVars vars = (YourPageVars)EZ_iso.IsolatedStorageAccess.GetFile("PageVars",typeof(YorPageVars));
这很不错,因为您可以将它用于导航以外的操作。您可以将它用于任何需要隔离存储的地方。此数据现已序列化到设备,因此即使应用程序关闭,它也会保留。如果您选择,您当然也可以删除该文件。
如果您有任何例外情况,请务必参阅文档。如果您仍然需要帮助,请随时通过Twitter @Anth0nyRussell或amr@AnthonyRussell.info
来打我