ロジックコードの記述
せっかくフォームデザイナに配置したJPAddressですが、今回のサンプルではデザインとロジックを分離したいので、さくっとフォームデザイナ上からアイコンを削除して、ロジック記述用のJPAddressModel.vbを作成して、そこでコードを使ってJPAddressを使ってみたいと思います。
Visual StudioのソリューションエクスプローラーでModelsフォルダを作成し、Modelsフォルダを右クリックして[追加]‐[クラス]メニューでクラスファイルを追加します。
クラスファイルには次のようなコードを記述します。
Imports GrapeCity.Win.JPAddress
Imports System.ComponentModel
Public Class JPAddressModel
Implements INotifyPropertyChanged
Private _Address As List(Of AddressInfo)
Public Property Address As List(Of AddressInfo)
Get
Return Me._Address
End Get
Set(value As List(Of AddressInfo))
Me._Address = value
Call NotifyPropertyChanged("Address")
End Set
End Property
Public Sub GetAddress(postCode As String)
Me.Address = (New GcJPAddress).GetAddress(postCode, True).ToList
End Sub
Public Event PropertyChanged(sender As Object,
e As PropertyChangedEventArgs) _
Implements INotifyPropertyChanged.PropertyChanged
Private Sub NotifyPropertyChanged(ByVal propertyName As String)
RaiseEvent PropertyChanged(Me,
New PropertyChangedEventArgs(propertyName))
End Sub
End Class
JPAddressの使い方は非常に簡単で、実際に郵便番号から住所を検索しているのは、GetAddressメソッドの中の次の1行です。
Me.Address = (New GcJPAddress).GetAddress(postCode, True).ToList
これでAddressプロパティに住所が設定されることになります。郵便番号から住所を検索したとき、複数の結果が返ってくる場合があります。そのためJPAddressでの検索結果もIEnumerable型になっています。ここでは画面との連結を考えてToListを使ってListに変換しています。
それでは次に、Addressプロパティを画面に連結するためのクラスをつくりましょう。
画面連結用クラスの作成
ソリューションエクスプローラーでViewModelsフォルダを作成し、フォルダ上で右クリックをして[追加]‐[クラス]メニューを選択して、MainViewModelクラスファイルを作成します。JPAddressModelのPublicなプロパティ、メソッド、イベントをそのままPublicで公開すればいいのでコードは次のようになります。
Imports System.ComponentModel
Imports GrapeCity.Win.JPAddress
Public Class MainViewModel
Implements INotifyPropertyChanged
Private WithEvents VmModel As New JPAddressModel
Public ReadOnly Property Address As List(Of AddressInfo)
Get
Return Me.VmModel.Address
End Get
End Property
Public Sub GetAddress(postCode)
Call Me.VmModel.GetAddress(postCode)
End Sub
Public Event PropertyChanged(sender As Object,
e As PropertyChangedEventArgs) _
Implements INotifyPropertyChanged.PropertyChanged
Private Sub VmModel_PropertyChanged(sender As Object,
e As PropertyChangedEventArgs) _
Handles VmModel.PropertyChanged
RaiseEvent PropertyChanged(Me,
New PropertyChangedEventArgs(e.PropertyName))
End Sub
End Class
画面の作成
今回のサンプルでは、郵便番号欄、検索ボタン、検索結果一覧という画面構成にします。
一覧部分はDataGridViewを採用し、Columnsに表示したい要素を事前に設定しておきます。
