我正在使用此代码在Windows 8应用中传递值。
以下代码在单击项目时将数据传递到页面,因此它将sectorId传递给Quiz页面。
private void quizbtn_Click(object sender, RoutedEventArgs e)
{
var sectorId = "Items1";
this.Frame.Navigate(typeof(Quiz), sectorId);
}
“测验”页面在加载页面函数中接收传递的参数sectorId
,其中Object navigationParameter
是sectorId
传递的。
protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
{
}
我想让对象传递,即sectorId
更复杂,以便它不仅包含文本字符串“Items1”,而是包含文本字符串,索引和表示的值总计(int)。
如何传递此复杂对象并将其加载到页面上?
答案 0 :(得分:1)
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<String, Object> 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
}
答案 1 :(得分:0)
通常使用查询字符串(GET)或使用表单(POST)在页面之间传递数据。你不能真正在页面之间传递一个复杂的对象,除非你先将它序列化为一个字符串然后使用前面提到的方法(GET / POST),但由于篇幅限制,不推荐这样做。
但是,您可以使用会话状态和/或应用程序状态来存储复杂对象(只要它们是可序列化的),并在不同的请求中使用它们。