イベント処理
DataGridに配置したButtonのClickイベントを処理するには?
View(MainWindow)にButtonのイベント処理を書けば良さそうだが、MVVMの場合はイベントもBindingでやった方が良いらしい。
まずイベントを処理するクラス(ClickEventCommandクラスを作成。
ボタンクリックでは "OK" のMessageBoxを表示させる。
ClickEventCommand.vb
CanExecuteメソッドは、Executeが実行可能かをBooleanで返す。今回は実行したいので何も考えずにTrueを返している。
ViewModel.vb
ClickEventCommandのオブジェクトを返すプロパティを追加する。
MainWindow.xaml
ButtonにCommand属性を追加、属性値にはViewModelに追加したClickEventプロパティを指定。
ただ単純に指定しただけではダメなようで、"Binding DataContext.ClickEvent" と指定しなければならない。 また、RelativeSourceの指定も必要。理由は良く分からない。
プログラムを実行し、DataGridのボタンクリックで "OK" のメッセージが表示されることを確認する。
まずイベントを処理するクラス(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 件のコメント:
コメントを投稿