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

时间:2013-11-17 20:20:14

标签: c# object visual-studio-2012 windows-8

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

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

private void quizbtn_Click(object sender, RoutedEventArgs e)
        {

            var sectorId = "Items1";

            this.Frame.Navigate(typeof(Quiz), sectorId);
        }

“测验”页面在加载页面函数中接收传递的参数sectorId,其中Object navigationParametersectorId传递的。

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

我想让对象传递,即sectorId更复杂,以便它不仅包含文本字符串“Items1”,而是包含文本字符串,索引和表示的值总计(int)。

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

2 个答案:

答案 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),但由于篇幅限制,不推荐这样做。

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