WPF DataGrid中的元件Binding Command失敗
原因
DataGrid因為ItemSource已經Binding ViewModel中的指定的集合屬性(DataSource)
它的xaml結構大概長這樣:
1 2 3 4 5 6 7 8 9
| <DataGrid ItemsSource="{Binding DataSource}"> <DataGridTemplateColumn Width="SizeToCells"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Command="{Binding ButtonClickCommand}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid>
|
但是Button需要Binding ViewModel中的Command屬性,但是因為DataGrid的資料來源DataSource中沒有Command屬性,所以Bindind失敗,按按鈕才不會成功
解決方式
讓Button Binding Command往外曾找這個屬性
RelativeSource Mode= FindAncestor : 找祖先
AncestorType={ x:Type Window} : 祖先類型是Window
因為我在CodeBehind是用 this.DataContext = viewModelO=Instance;),所以從標籤是window中的DataContext中找要綁定的命令屬性
1 2 3 4 5 6 7 8 9
| <DataGrid ItemsSource="{Binding DataSource}"> <DataGridTemplateColumn Width="SizeToCells"> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <Button Command="{Binding RelativeSource={RelativeSource Mode= FindAncestor, AncestorType={ x:Type Window}}, Path=DataContext.ButtonClickCommand}"/> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid>
|