イベント処理
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 ClassExecuteメソッドに処理すべき内容を記述、
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 件のコメント:
コメントを投稿