連結用クラスの作成
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ならではの修飾を加えていってみましょう。