ロジックコードを記述する
次に、ソリューションエクスプローラー内の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
- この記事のキーワード