【问题标题】:How to display passed information for Windows Phone 8.1如何显示 Windows Phone 8.1 的传递信息
【发布时间】:2016-04-08 11:05:30
【问题描述】:
我正在尝试为 windows phone 8.1 开发应用程序。我是应用程序开发的初学者。现在我的问题是 - 我怎样才能在文本框或某种形式的另一个页面中显示传递的信息。它是一个购物应用程序,我正在尝试获取作为按钮的项目名称,当单击购物篮时,它会出现在购物篮页面中。代码如下。所以即来自Menu.xaml的项目。在Basket.xaml中显示在菜单中的按钮时选择。
Basket.Xaml
protected override void OnNavigatedTo(NavigationEventArgs e)
{
Menu.PassedData data = e.Parameter as Menu.PassedData;
}
比如说,我在 Basket.xaml 中有一个 txt 框,旨在显示在 Menu.xaml 中选择的项目,我该怎么做呢?
【问题讨论】:
标签:
c#
xaml
navigation
visual-studio-2015
windows-phone-8.1
【解决方案1】:
在第二页(篮子一,如果我理解正确的话),您应该能够访问传递的数据,非常简单:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
var passedData = e.Parameter as PassedData; //cast the object back to PassedData type.
someTextBlockOnBasket.Text = passedData.Name;
}
【解决方案2】:
如果您要传递的数据是原始类型,您可以像以前一样传递。
如果不是原始数据
您可以存储在 LocalSettings 中。为此,您必须将您的类序列化为 Json,xml
LocalSettings.Values[key]=Json Converter.Serialize(object)
但是 LocalSettings 有一些大小限制,如果要传递的数据非常大,你可以序列化并存储到一个文件中并在下一页使用它
这里是序列化和反序列化的代码
MemoryStream sessionData = new MemoryStream();
DataContractSerializer serializer = new
DataContractSerializer(typeof(Menu.PassedData;
));
serializer.WriteObject(sessionData, data);
StorageFile file = await ApplicationData.Current.LocalFolder
.CreateFileAsync(sFileName);
using (Stream fileStream = await file.OpenStreamForWriteAsync())
{
sessionData.Seek(0, SeekOrigin.Begin);
await sessionData.CopyToAsync(fileStream);
await fileStream.FlushAsync();
}
Deserialize back this way -
StorageFile file = await ApplicationData.Current.LocalFolder.
GetFileAsync(sFileName);
using (IInputStream inStream = await file.OpenSequentialReadAsync())
{
DataContractSerializer serializer =
new DataContractSerializer(typeof(Menu.PassedData;
));
var data = (Menu.PassedData;
)serializer
.ReadObject(inStream.AsStreamForRead());
}
更多信息请参考link