在C#中的页面之间传递复杂对象

我正在使用此代码在Windows 8应用程序中传递值。

以下代码在单击项目时将数据传递到页面,因此它将sectorId传递到Quiz页面。

private void quizbtn_Click(object sender, RoutedEventArgs e) { var sectorId = "Items1"; this.Frame.Navigate(typeof(Quiz), sectorId); } 

Quiz页面在加载页面函数中接收传递的参数sectorId ,其中Object navigationParameter是传递的sectorId

 protected override void LoadState(Object navigationParameter, Dictionary pageState) { } 

我想让对象传递,也就是说, sectorId更复杂,因此它不仅包含文本字符串“Items1”,而是包含文本字符串和索引,以及表示total(int)的值。

如何传递此复杂对象并将其加载到页面上?

Frame.Navigate方法将object作为参数,并且实际上并不关心它是什么类型的object 。 您可以创建任何类型的对象并将其作为第二个参数传递。

 public struct QuizArgs { public string Question; public string[] Answers; public int CorrectIndex; public DateTime Timestamp; } private void quizbtn_Click(object Sender, RoutedEventArgs e) { var args = new QuizArgs { Question = "What color is the sky?", Answers = new string[] { "Red", "Green", "Blue", "Silver" }, CorrectIndex = 2, Timestamp = DateTime.Now }; this.Frame.Navigate(typeof(Quiz), args); } 

在您的Quiz类中:

 protected override void LoadState(Object navigationParameter, Dictionary pageState) { if (navigationParameter == null) throw new ArgumentNullException("navigatyionParameter"); QuizArgs args = navigationParameter as QuizArgs; if (args == null) throw new ArgumentException(string.Format("Incorrect type '{0}'", navigationParameter.GetType().Name), "navigationParameter"); // Do something with the 'args' data here } 

在页面之间传递数据通常使用查询字符串(GET)或使用表单(POST)来完成。 你不能真正在页面之间传递一个复杂的对象,除非你先将它序列化为一个字符串然后使用前面提到的方法(GET / POST),但由于篇幅限制,不推荐这样做。

但是,您可以使用会话状态和/或应用程序状态来存储复杂对象(只要它们是可序列化的)并在不同请求中使用它们。