簡體   English   中英

Windows 電話 7,獲取列表框項名稱並將其傳遞給另一個 xaml 頁面

[英]Windows phone 7, grabbing listboxitem name and passing it to another xaml page

我有兩個 XAML 頁面。 一頁(名為 Page1)有一個名為“strangers”的列表框,在此 ListBox 內有 ListBoxItems。

我的第二頁被命名為:Page2。

每當有人從 Page1 中點擊 ListBoxItem 時,ListBoxItem 的名稱就會轉移到另一個 XAML 頁面 Page2,其中 Page2 將讀取 ListboxItem 名稱,然后根據 LisBoxItem 名稱,將使用文本填充頁面。

順便說一句,我想通過數百個列表框項 go 都調用相同的 function General_MouseLeftButtonDown,並根據單擊的列表框項的名稱動態更改頁面的內容。

所有內容將在啟動時出現在手機中。

然而似乎有一個問題——我不能把這個送到 function。 這是我的代碼,希望對大家有所幫助。

第1頁Xaml信息:

<ListBox x:Name="Strangers" Margin="0,0,-12,0">

    <ListBoxItem x:Name="Peter">
        <StackPanel Orientation="Horizontal" Margin="0,0,0,17" MouseLeftButtonDown="General_MouseLeftButtonDown">
        </StackPanel>
    </ListBoxItem>

第1頁C#信息:

    PhoneApplicationService phoneAppService = PhoneApplicationService.Current;

    private void General_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        var namers="";

        namers= (sender as ListBoxItem).Name.ToString();

        phoneAppService.State["theperson"] = namers;


        NavigationService.Navigate(new Uri("/Page2.xaml", UriKind.Relative));
    }

第2頁C#:

PhoneApplicationService phoneAppService = PhoneApplicationService.Current;

    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        base.OnNavigatedTo(e);

        object something="";

        if (phoneAppService.State.ContainsKey("theperson"))
        {
            if (phoneAppService.State.TryGetValue("theperson", out something))
            {
                string namers = something.ToString();
                Textblock.Text = namers;
            }
        }
    }

但是,當我運行它時,我得到的錯誤是在我單擊 listboxitem 以轉換頁面之后。 我收到以下錯誤:

空引用異常

namers= (sender as ListBoxItem).Name.ToString();

我是否正確執行此 XAML 數據傳輸? 顯然出了點問題,但我不能完全理解是什么或為什么。

您應該使用QueryStrings而不是State 后者旨在用於當您的應用程序被墓碑化並且您希望返回同一頁面而不會丟失輸入的任何信息時使用。 QueryStrings用於以字符串格式將數據傳輸到另一個頁面。

所以,第 1 頁 C#:

private void General_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    var namers="";

    namers= (sender as ListBoxItem).Name.ToString();



    NavigationService.Navigate(new Uri("/Page2.xaml?name=" + namers, UriKind.Relative));
}

第2頁

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    string namers="";

    NavigationContext.QueryString.TryGetValue("name", out namers)

    Textblock.Text = namers;

}

我在第 2 頁所做的是檢索name的值(這是我在查詢字符串中用作鍵的值,但您可以使用任何東西)。 使用TryGetValue ,而不是直接檢查索引( NavigationContext.QueryString["name"] )意味着如果失敗,它將返回 false 而不是拋出異常。 如果需要,您可以檢查返回的 bool 值,但似乎不需要,因為namers已經初始化為""

暫無
暫無

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

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