次に、ソリューションエクスプローラー内のMainPage.xamlを展開し、表示されるMainPage.xaml.vbをダブルクリックしてリスト5のロジックコードを記述します。

ロジックコードを記述する

リスト5 (MainPage.xaml.vb)

Option Strict On
Imports System.Xml.Linq

PersonalInfoクラス内に文字列型の「氏名」と「年齢」プロパティを定義しておきます。
Public Class PersonalInfo
  Property 氏名 As String
  Property 年齢 As String
End Class

Partial Public Class MainPage
  Inherits PhoneApplicationPage
  ' Constructor
  Public Sub New()
    InitializeComponent()
  End Sub

ページが読み込まれた時の処理

ReadXmlクラスの新しいインスタンスmyReadXml変数を宣言します。
PersonalInfoクラス型の新しいリストである、myPersonalInfoオブジェクト変数を宣言します。
ReadXmlクラスのインスタンスmyReadXmlでReadXmlDoc関数を呼び出します。Descendantsメソッドで取得した<情報>要素のコレクションに対して、各要素を変数 result に格納しながら、PersonalInfoクラスの「氏名」と「年齢」プロパティに、<氏名>と<年齢>要素の値を指定し、AddメソッドでmyPersonalInfoオブジェクトに追加していきます。「年齢」プロパティには文字列「歳」を連結しています。
ListPickerのItemsSourceプロパティにmyPersonalInfoオブジェクトを指定します。
  Private Sub MainPage_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded
    Dim myReadXml As New ReadXml
    Dim myPersonalInfo As New List(Of PersonalInfo)
 
    For Each result In From c In myReadXml.ReadXmlDoc.Descendants("情報") Select c
      myPersonalInfo.Add(New PersonalInfo With {.氏名 = result.Element("氏名").Value, .年齢 = result.Element("年齢").Value & "歳"})
    Next
    ListPicker1.ItemsSource = myPersonalInfo
  End Sub

ListPickerコントロールから任意の氏名が選択された時の処理

ListPicker1から選択された項目をPersonalInfoクラスにキャストし、その「氏名」を取得します。変数myNameに格納しておきます。
MessageBox.Showメソッドで変数myNameの詳細データを表示するかどうかの、確認メッセージを表示します。[OK]が選択された場合は、NavigationService.Navigateメソッドで、DetailsPage.xamlに遷移します。その際、Nameというキーワードに変数myNameの値を引数として持たせています。[Cancel]が選択された場合は処理を抜けます。
  Private Sub ListPicker1_SelectionChanged(sender As Object, e As System.Windows.Controls.SelectionChangedEventArgs) Handles ListPicker1.SelectionChanged
    Dim myName = DirectCast(ListPicker1.SelectedItem, PersonalInfo).氏名
    Dim kakunin = MessageBox.Show(myName & "さんの詳細データを" & vbCrLf & "表示しますか?", "確認", MessageBoxButton.OKCancel)
    Select Case kakunin
      Case MessageBoxResult.OK
        NavigationService.Navigate(New Uri("/DetailsPage.xaml?Name=" & myName, UriKind.Relative))
      Case MessageBoxResult.Cancel
        Exit Sub
    End Select
  End Sub
End Class

ソリューションエクスプローラー内のDetailsPage.xamlを展開し、表示されるDetailsPage.xaml.vbをダブルクリックしてリスト6のロジックコードを記述します。

リスト6 (DetailsPage.xaml.vb)

Option Strict On
Imports System.Xml.Linq

Personクラス内に文字列型の「年齢、住所、勤務先、空白」プロパティを定義しています。
Public Class Person
  Property 年齢 As String
  Property 住所 As String
  Property 勤務先 As String
  Property 空白 As String
End Class

Partial Public Class DetailPage
  Inherits PhoneApplicationPage
 
  Public Sub New()
    InitializeComponent()
  End Sub

画面の遷移で移動した時に最初に呼ばれるイベント

ここで、MainPage.xamlから渡された文字データを受け取ります。文字データはNavigationContextのQueryStringにDictionary として提供されます。
送信時のキーワード(この場合Name)を基に渡された文字列情報を、myParam(“Name”)として取得し、変数myNameに格納します。
x:NameがPageTitleというTextBlockのTextプロパティに変数myNameを指定します。「氏名」が表示されます。
ReadXmlクラスの新しいインスタンスmyReadXml変数を宣言します。
Personクラス型の新しいリストである、myPerson変数を宣言します。
ReadXmlクラスのインスタンスmyReadXmlでReadXmlDoc関数を呼び出します。Descendantsメソッドで取得した<情報>要素の子要素<氏名>の値が、変数myNameに格納されている値に等しいコレクションに対して、各要素を変数 result に格納しながら以下の処理を実行します。
Personクラスの「年齢、住所、勤務先」プロパティに、<年齢>、<住所>、<勤務先>要素の値を指定し、「空白」プロパティには、データの区切り線となる「----」の文字列を指定して、AddメソッドでmyPersonオブジェクトに追加します。
ListBoxのItemsSourceプロパティにmyPersonオブジェクトを指定します。
  Protected Overrides Sub OnNavigatedTo(e As System.Windows.Navigation.NavigationEventArgs)
    Dim myParam As IDictionary(Of String, String) = Me.NavigationContext.QueryString
    Dim myName As String = myParam("Name")
    PageTitle.Text = myName
    Dim myReadXml As New ReadXml

    Dim myPerson As New List(Of Person)

    For Each result In From c In myReadXml.ReadXmlDoc.Descendants("情報") Where c.<氏名>.Value.Equals(myName) Select c
      With myPerson
      .Add(New Person With {.年齢 = "【年 齢】" & result.Element("年齢").Value & "歳",
                                        .住所 = "【住 所】" & result.Element("住所").Value,
                                        .勤務先 = "【勤務先】" & result.Element("勤務先").Value,
                                        .空白 = "------------------------"})
      End With
    Next
    ListBox1.ItemsSource = myPerson
    MyBase.OnNavigatedTo(e)
  End Sub
End Class

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30