#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:
-
Вы можете сохранить объект в 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
-
В качестве альтернативы используйте статический объект, на который можно ссылаться с обеих страниц.
общедоступный статический университетский UnivObject;
-
Если параметров не так много, отправьте данные в параметрах запроса следующим образом: Скажем, если вы привязали свой 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(); Пожалуйста, отметьте ответ, если он показался вам полезным. Спасибо!