Создание основного подробного представления в приложении Windows phone с использованием данных json из веб-службы

#c# #wpf #json #xaml

#c# #wpf #json #xaml

Вопрос:

Я хочу выбрать элемент listbox и отобразить его детали на следующей странице в текстовых блоках. Вот мой код. Пожалуйста, помогите мне или дайте несколько ссылок, на которые я мог бы сослаться… Заранее спасибо.

Вот моя основная страница xaml.

 <ListBox x:Name="lstUniversity" Height="582" SelectionMode="Single" FontSize="30"     VerticalAlignment="Bottom">
          <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="1">
                    <Button Name="btn" Content="{Binding NAME}" Click="click" BorderThickness="1"  HorizontalContentAlignment="Left"
                        Height="75" Width="460" FontSize="24" 
                        HorizontalAlignment="Stretch"
                        CommandParameter="{Binding}" Foreground="White"/>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
  

мой код c # для главной страницы

 public class University
{
    public string UID { get; set; }
    public string NAME { get; set; }
    public string RANK { get; set; }
    public string FEES { get; set; }
    public string APPLIEDFEES { get; set; }
    public string CITY { get; set; }
    public string STATE { get; set; }
}

protected override void OnNavigatedTo(NavigationEventArgs args)
{
   try
   {
      WebClient webClient = new WebClient();
      Uri uri = new Uri("http://www.mastertionary.com/ios/connect1.php");
      webClient.DownloadStringCompleted  = new         DownloadStringCompletedEventHandler(webClient_DownloadStringCompleted);
  webClient.DownloadStringAsync(uri);
   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.Message);
   }
}     

void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
{
    var rootObject = JsonConvert.DeserializeObject<List<University>>(e.Result);
        lstUniversity.ItemsSource = rootObject;
}

public void click(object sender, RoutedEventArgs e)
{   
  NavigationService.Navigate(new Uri("/details.xaml", UriKind.Relative));
}
  

Моя страница сведений xaml — это

 <ListBox x:Name="unidetails" Height="582" SelectionMode="Single" FontSize="30" VerticalAlignment="Bottom">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Grid VerticalAlignment="Top" HorizontalAlignment="Stretch" Margin="1">
                    <StackPanel><TextBlock Text="{Binding NAME}" Height="100" Width="300"/>
                    <TextBlock Text="{Binding RANK}" Height="100" Width="300"/>
                    <TextBlock Text="{Binding FEES}" Height="100" Width="300"/>
                    <TextBlock Text="{Binding APPLIEDFEES}" Height="100" Width="300"/>
                    </StackPanel>
                </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
  

Пожалуйста, помогите мне, как я могу отобразить детали, такие как ранг, сборы и т.д., В соответствии с выбранным элементом на главной странице?

Комментарии:

1. почему у вас две страницы? вы можете сделать это на одной странице

2. Сводная страница намного чище и проще в реализации.

3. я хочу сделать это с двумя страницами, пожалуйста, помогите мне с этим или подскажите несколько ссылок для ссылки

Ответ №1:

  1. Вы можете сохранить объект в PhoneApplicationState и получить его на следующей странице.

       if (PhoneApplicationService.Current.State.ContainsKey("ApplicationDataObject"))
      {
        // If it exists, assign the data to the application member variable.
        ApplicationDataStatus = "data from preserved state.";
        ApplicationDataObject = PhoneApplicationService.Current.State["ApplicationDataObject"] as University;
      }
      

    См.:http://msdn.microsoft.com/en-us/library/windowsphone/develop/ff967547 (v = против 105).aspx

  2. В качестве альтернативы используйте статический объект, на который можно ссылаться с обеих страниц.

    общедоступный статический университетский UnivObject;

  3. Если параметров не так много, отправьте данные в параметрах запроса следующим образом: Скажем, если вы привязали свой listbox к списку, вы можете получить доступ к выбранному элементу в событии нажатия listbox как:

     University univObj = listbox.SelectedItem;
    
    NavigationService.Navigate(new Uri("/details.xaml?UID="   univObj.UID   "amp;NAME="   univObj.Name   "amp;RANK="   univObj.Rank,UriKind.Relative));
      

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

 NavigationContext.QueryString["UID"].ToString;
  

Комментарии:

1. В третьем пункте, как я могу передать конкретные параметры… поскольку значения будут меняться при каждом выборе …. ранг и имя будут соответствовать названию университета, который я выбрал на первой странице …. soo, как я должен передавать переменные соответствующим образом? Я новичок в этом .. пожалуйста, помогите мне понять

2. спасибо! пожалуйста, еще один вопрос .. если я хочу отобразить только те имена, которые связаны с uid, то как использовать предложение where?

3. @user3710436 использует filteredList = имя_листинга. Где(ob => ob.UID!=null). ToList(); Пожалуйста, отметьте ответ, если он показался вам полезным. Спасибо!