передача данных в формате RSS на другую страницу, Windows Phone 7 - PullRequest
1 голос
/ 21 июля 2011

Это может показаться кому-то простым ответом, поэтому я делаю попытку, пытаясь решить эту проблему.

Я передаю информацию RSS в listbox itemtemplate с привязанными данными. Каждый элемент списка имеет URL-адрес изображения. Я хочу, чтобы пользователь мог щелкнуть элемент списка, передать URL этого изображения на новую страницу и открыть страницу с изображением.

Единственная проблема? Я не могу заставить это работать.

Вот что у меня есть:

page1 XAML:

       <ListBox x:Name="listbox" Grid.Row="1" SelectionChanged="listbox_SelectionChanged">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <Image Grid.Row="0" HorizontalAlignment="Left" Height="60" Width="60" Source="{Binding Url}"/>

                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Page1 cs

    private void listbox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var URLname = "";

        URLname = (sender as RssItem).Url.ToString();

    NavigationService.Navigate(new Uri("/SubmittedPic.xaml?image=" + URLname, UriKind.Relative));
    this.listbox.SelectedItem = (sender as ListBoxItem);

    }

Код разбивается на URLname = (sender as RssItem).Url.ToString(); и он говорит, что исключение нулевой ссылки не было обработано.

Любая помощь по этому вопросу будет более чем признательна.

Ответы [ 2 ]

1 голос
/ 21 июля 2011

Из вашего кода я думаю, что вы путаете ListBoxItem и связанный объект RssItem.Если вы связываете правильно, RssItem будет типом объекта, содержащегося в ListBoxItem.DataContext.

. Чтобы проверить это, используйте отладчик, чтобы увидеть, какой тип и значение sender на самом деле.

В моем случае работает следующий код: он берет отправителя и получает его DataContext, а затем преобразует его в тип моего связанного объекта.

FrameworkElement fe = (FrameworkElement)sender;
RssItem rssItem = (RssItem) fe.DataContext;
string url = rssItem.URL.ToString();

Кроме того, обратите внимание, что с помощью SelectionChangedтаким образом, могут возникнуть тонкие ошибки при выборе касания и при обратной навигации по этому списку со страницы сведений.Чтобы избежать этого, вы должны использовать тап-событие в вашем элементе списка.

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

Событие SelectionChanged использует стандартный шаблон EventHandler, которому соответствуют все события инфраструктуры пользовательского интерфейса, где первый аргумент sender типа object является исходным элементом пользовательского интерфейса для события.В этом случае, поскольку событие отправляется ListBox, отправитель будет ссылаться на ваш ListBox.

. Чтобы получить выбранный элемент, вам необходимо проверить свойство ListBox.SelectedItem.Это должен быть ваш RssItem.

Стоит отметить, что ListBox не самый лучший элемент управления для навигации, во-первых, он немного тяжелый (в нем есть ненужные элементы пользовательского интерфейса, поддерживающие выбор), а во-вторых,Вы должны очистить выделение, чтобы можно было щелкнуть по тому же элементу, когда вы вернетесь к исходной странице списка.

Вы можете найти выделенный элемент управления для навигации здесь:

http://www.scottlogic.co.uk/blog/colin/2011/04/a-fast-loading-windows-phone-7-navigationlist-control/

...