連結用クラスの作成
ViewModelsフォルダには、MainViewModelクラスを定義します。このクラスが最終的に画面とバインディングします。
Imports System.ComponentModel
Imports System.Collections.ObjectModel
Public Class MainViewModel
Implements INotifyPropertyChanged
Private WithEvents Model As New ConecoModel
Public ReadOnly Property Items As List(Of ConecoContext)
Get
Return Me.Model.Items
End Get
End Property
Public Event PropertyChanged(sender As Object,
e As PropertyChangedEventArgs) _
Implements INotifyPropertyChanged.PropertyChanged
Private Sub Model_PropertyChanged(sender As Object,
e As PropertyChangedEventArgs) _
Handles Model.PropertyChanged
RaiseEvent PropertyChanged(Me,
New PropertyChangedEventArgs(e.PropertyName))
End Sub
Public Sub GetItemsCommand(ByVal parameter As String)
Me.Model.GetItems(parameter)
End Sub
End Class
データ自動表示
それでは、SPREADに単純にMainViewModelクラスをバインディングしてみましょう。
MainForm.vbでは、ConecoModelと連結したMainViewModelをDataContextに割り当てるコードだけが必要です。
Imports System.ComponentModel
Public Class MainForm
Private WithEvents ViewModel As New MainViewModel
Private Sub Me_Load(sender As Object, e As EventArgs) Handles Me.Load
Me.Cursor = Cursors.WaitCursor
Me.ViewModel.GetItemsCommand("")
End Sub
Private Sub ViewModel_PropertyChanged(sender As Object,
e As PropertyChangedEventArgs) _
Handles ViewModel.PropertyChanged
Me.FpSpread1.DataSource = Me.ViewModel.Items
Me.Result_Sheet.AutoGenerateColumns = True
Me.Cursor = Cursors.Default
End Sub
End Class
このサンプルでは、.NET Framework 4.5で追加になった非同期待ち合わせのAsync-Awaitを使っているため、「Me.ViewModel.GetItemsCommand("")」の実行直後はまだ値が設定されていません。値が設定されるのは、PropertyChangedイベントでItemsプロパティが変更されたのが通知されてからになります。
そのため遅い回線でサンプルを実行した場合は、画面が表示された後、しばらくしてから検索結果が表示されます。
実行結果
SPREADのデザイン側にはまだ何も設定はしていませんが、この状態でどのような表示になるか確認してみましょう。
SPREADは高機能なので、使うのが大変だという先入観を持ってしまう人もいるかもしれません。しかし、表示用のListの内容をそのまま表示するのであれば、SPREAD自体に設定は不要となります。ですから将来的に複雑な修飾が出来るように、可能であればシンプルな用途のときから、「表といえばSPREAD」というようにSPREADを使って画面をつくっていくのが得策です。
それではこのシンプルな表示から、SPREADならではの修飾を加えていってみましょう。

