Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# UWP,在窗口之间传递信息_C#_Xaml_Uwp - Fatal编程技术网

C# UWP,在窗口之间传递信息

C# UWP,在窗口之间传递信息,c#,xaml,uwp,C#,Xaml,Uwp,在UWP项目中,我尝试在两个窗口之间传递信息。单击一个项目将打开另一个包含更多详细信息的XAML页面。我不想导航,因为我不想主页消失 代码如下,它按预期工作。当XAML打开时,我可以看到所有的控件,代码按预期运行。实际上,我想在Detail.xaml文件中预先填充几个文本块 CoreApplicationView newView = CoreApplication.CreateNewView(); int newViewId = 0; await newView.Dispatcher.RunAs

在UWP项目中,我尝试在两个窗口之间传递信息。单击一个项目将打开另一个包含更多详细信息的XAML页面。我不想导航,因为我不想主页消失

代码如下,它按预期工作。当XAML打开时,我可以看到所有的控件,代码按预期运行。实际上,我想在Detail.xaml文件中预先填充几个文本块

CoreApplicationView newView = CoreApplication.CreateNewView();
int newViewId = 0;
await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
    Frame frame = new Frame();
    frame.Navigate(typeof(Detail), null);
    Window.Current.Content = frame;
    Window.Current.Activate();
    newViewId = ApplicationView.GetForCurrentView().Id;
});
bool viewShown = await ApplicationViewSwitcher.TryShowAsStandaloneAsync(newViewId);

代码取自

如果您在打开辅助视图之前已经有了要显示的数据,则可以在导航期间轻松地将其传递到
详细信息
视图:

string data = ...;
frame.Navigate(typeof(Detail), data);   
然而,当您需要在视图之间进行实际通信时,事情会变得更加棘手。UWP中的每个视图都有自己的UI线程和自己的
调度程序
。这意味着所有处理UI的代码(如填充控件、更改页面背景等)都需要在给定视图的线程上运行。执行此“通信”的一种方法是存储对新创建的应用程序视图的引用,或通过
CoreApplication.Views
属性访问它。无论何时需要操作视图的UI,都可以使用dispatcher

await newView.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
    //do something with the secondary view's UI
    //this code now runs on the secondary view's thread
    //Window.Current here refers to the secondary view's Window

    //the following example changes the background color of the page
    var frame = ( Frame )Window.Current.Content;
    var detail = ( Detail )frame.Content;
    var grid = ( Grid )detail.Content;
    grid.Background = new SolidColorBrush(Colors.Red);
}

谢谢,似乎将ID传递到参数中是最简单的。我可以在第二个页面上从SQLite中检索数据,而不是从初始页面预先填充字段。