Windows phone 7, захват имени списка и передача его на другую страницу xaml - PullRequest
0 голосов
/ 11 июля 2011

У меня есть две страницы XAML.На одной странице (с именем Page1) есть список с именем «незнакомцы», и внутри этого ListBox, ListBoxItems.

Моя вторая страница называется: Page2.

Всякий раз, когда кто-то нажимает на ListBoxItem из Page1, имяListBoxItem переносится на другую страницу XAML, Page2, где Page2 будет читать имя ListboxItem, а затем, основываясь на имени LisBoxItem, заполнит страницу текстом.

Кстати, я хочуПройдите через сотни списочных элементов, каждый из которых вызывает одну и ту же функцию General_MouseLeftButtonDown, и динамически изменяет содержимое страницы на основе имени элемента списка, по которому был выполнен щелчок.

Все содержимое будет находиться в телефоне при запуске.

Однако, похоже, есть проблема - я не могу заставить это работать.Вот мой код, и, надеюсь, вы все поможете.

Page1 Xaml info:

<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>

Page1 C # info:

    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));
    }

Page2 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;
            }
        }
    }

Однако, когда я запускаю это, я получаю сообщение об ошибке после нажатия элемента списка для перехода на страницу перехода.Я получаю следующую ошибку:

NullReferenceException

на

namers = (отправитель как ListBoxItem) .Name.ToString ();

Правильно ли я делаю эту передачу данных XAML?Очевидно, что-то не так, но я не могу понять, что или почему.

1 Ответ

0 голосов
/ 11 июля 2011

Вы должны использовать QueryStrings вместо State.Последний предназначен для использования, когда ваше приложение захоронено, и вы хотите вернуться на ту же страницу без потери введенной информации.QueryStrings используются для передачи данных в строковом формате на другую страницу.

Итак, Page 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"]) означает, что в случае сбоя он вернет ложь, а не вызовет исключение.Вы можете проверить возвращаемое значение bool, если хотите, но, похоже, в этом нет необходимости, поскольку namers уже инициализирован на "".

...