簡體   English   中英

在C#中的頁面之間傳遞復雜對象

[英]Pass complex object between pages in C#

我正在使用此代碼在Windows 8應用程序中傳遞值。

下面的代碼在單擊某項時將數據傳遞到頁面,因此將扇區ID傳遞到測驗頁面。

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”,而且還包含文本字符串,索引和代表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<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
}

頁面之間的數據傳遞通常使用查詢字符串(GET)或表單(POST)完成。 您不能真正在頁面之間傳遞復雜的對象,除非先將其序列化為字符串然后使用前面提到的方法(GET / POST),但是由於長度限制,不建議這樣做。

但是,您可以使用會話狀態和/或應用程序狀態來存儲復雜的對象(只要它們是可序列化的),並在不同的請求中使用它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM