如何在UWP中导航返回时正确返回数据

  • 本文关键字:返回 数据 导航 UWP c# uwp
  • 更新时间 :
  • 英文 :


我在我的项目中尝试了两个页面:MainPage.xaml和DetailPage.xaml.

在MainPage.xaml.cs中,我设置了一个事件来导航到DetailPage

private void Import_Button_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(DetailPage));
}

在DetailPage.xaml.cs中,我用参数将事件设置为NavigateBack

private async void DoneButton_Click(object sender, RoutedEventArgs e)
{
RenderTargetBitmap renderTarget = new RenderTargetBitmap();
await renderTarget.RenderAsync(swapChainPanel);
IBuffer pixelBuffer = await renderTarget.GetPixelsAsync();
DataReader dataReader = DataReader.FromBuffer(pixelBuffer);
byte[] bytes = new byte[pixelBuffer.Length];
dataReader.ReadBytes(bytes);
ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;
localSettings.Values["thumbnail"] = bytes;
localSettings.Values["test setting"] = "a device specific setting";
Frame.GoBack();
}

我不知道如何直接返回字节数组和字符串。所以我使用LocalSettings来存储参数,但如果数据太大,它会给出以下错误:

状态管理器设置值的大小已超过限制。

那么如何正确返回数据呢?我需要将数据保存为文件并只返回路径吗?

如何在UWP 中导航返回时正确返回数据

GoBack不传递参数,因此您需要通过外部通道传递数据。

一种可能性是生成Action参数,将其从MainPage传递给DetailPage。并在从DetailPage调用GoBack之前调用此操作。

例如

public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
_backAction = new Action<byte[]>((para) =>
{
// get bytes here with para.
});
}
private Action<byte[]> _backAction;
private void Next_Click(object sender, RoutedEventArgs e)
{
this.Frame.Navigate(typeof(DetailPage),_backAction);
}
}

详细信息页面

public sealed partial class DetailPage : Page
{
public DetailPage()
{
this.InitializeComponent();
}
private Action<byte[]> backAction;
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
backAction = e.Parameter as Action<byte[]>;
}
private async void BackButton_Click(object sender, RoutedEventArgs e)
{
RenderTargetBitmap renderTarget = new RenderTargetBitmap();
await renderTarget.RenderAsync(this);
IBuffer pixelBuffer = await renderTarget.GetPixelsAsync();
DataReader dataReader = DataReader.FromBuffer(pixelBuffer);
byte[] bytes = new byte[pixelBuffer.Length];
dataReader.ReadBytes(bytes);
backAction(bytes);
Frame.GoBack();
}
}

最新更新