■ VisualBasic+WPF+YAML #8:DataGridのイベント

VBからYMALファイルを読み込みたい。
前回記事:VisualBasic+WPF+YAML #7:DataGridへの表示 5



イベント処理

DataGridに配置したButtonのClickイベントを処理するには? View(MainWindow)にButtonのイベント処理を書けば良さそうだが、MVVMの場合はイベントもBindingでやった方が良いらしい。
まずイベントを処理するクラス(ClickEventCommandクラスを作成。
ボタンクリックでは "OK" のMessageBoxを表示させる。

ClickEventCommand.vb
Public Class ClickEventCommand
    Implements ICommand

    Public Event CanExecuteChanged As EventHandler Implements ICommand.CanExecuteChanged

    Public Sub Execute(parameter As Object) Implements ICommand.Execute
        MessageBox.Show("OK")
    End Sub

    Public Function CanExecute(parameter As Object) As Boolean Implements ICommand.CanExecute
        Return True
    End Function
End Class
Executeメソッドに処理すべき内容を記述、
CanExecuteメソッドは、Executeが実行可能かをBooleanで返す。今回は実行したいので何も考えずにTrueを返している。

ViewModel.vb
ClickEventCommandのオブジェクトを返すプロパティを追加する。
Public Class ViewModel

    Public Property Model As New TestData()

    Private _ClickEvent As ClickEventCommand
    Public ReadOnly Property ClickEvent As ClickEventCommand
        Get
            If (_ClickEvent Is Nothing) Then
                _ClickEvent = New ClickEventCommand()
            End If
            Return _ClickEvent
        End Get
    End Property

End Class

MainWindow.xaml
ButtonにCommand属性を追加、属性値にはViewModelに追加したClickEventプロパティを指定。
ただ単純に指定しただけではダメなようで、"Binding DataContext.ClickEvent" と指定しなければならない。 また、RelativeSourceの指定も必要。理由は良く分からない。
<Button Content="..."  Command="{Binding DataContext.ClickEvent, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" />

プログラムを実行し、DataGridのボタンクリックで "OK" のメッセージが表示されることを確認する。



次回記事:VisualBasic+WPF+YAML #9:DataGridのイベント 2

-- 以上 --


VisualBasic, WPF, DataGrid, YAML, MVVM

0 件のコメント:

その他の記事