【WPF開發備忘】使用MVVM模式開發中列表控制元件內的按鈕事件無法觸發解決方法
阿新 • • 發佈:2021-09-03
實際使用MVVM進行WPF開發的時候,可能會用到列表控制元件中每行一個編輯或刪除按鈕,這時直接去繫結,發現無法響應:
<DataGridTemplateColumn Header="操作"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Command="{Binding DeleteCommand}" CommandParameter="SysID"></Button> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
我也是WPF新手,網上找到一些解決方法:http://stackoverflow.com/questions/4396203/how-to-fire-event-from-button-inside-datagrid-in-silverlight-and-mvvm
這種方法需要BUTTON重新繫結一個DataContext,可能造成某些資料丟失。不滿足我的功能要求。
最後在一篇文章的評論中找到解決方法如下:
<DataGridTemplateColumn Header="操作"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Command="{Binding DataContext.DeleteCommand, RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=UserControl}}" CommandParameter="{Binding SysID}" Content="刪除"></Button> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
主要是通過RelativeSource 進行 DataContext 查詢,進而進行繫結。