WPF DataGrid列头能否绑定命令?MVVMCross下IMvxCommand失效问题
解决WPF DataGrid列头绑定IMvxCommand无响应的问题
问题核心在于DataGridColumn不属于可视化树,它的DataContext不会自动继承DataGrid的ViewModel上下文,直接绑定IMvxSortCommand会找不到对应的命令实例。以下是两种可行的解决方式:
方式一:通过RelativeSource关联DataGrid的DataContext
修改列头按钮的Command绑定,通过RelativeSource定位到父级DataGrid,再引用它的DataContext:
<DataGridTemplateColumn Width="300"> <DataGridTemplateColumn.Header> <Button Content="SortColumn" Command="{Binding DataContext.IMvxSortCommand, RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}}" /> </DataGridTemplateColumn.Header> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Names}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn>
方式二:通过ElementName绑定(需给DataGrid命名)
如果你的DataGrid有明确命名(比如x:Name="MyDataGrid"),可以直接用ElementName绑定:
<DataGrid x:Name="MyDataGrid" ...> <DataGridTemplateColumn Width="300"> <DataGridTemplateColumn.Header> <Button Content="SortColumn" Command="{Binding DataContext.IMvxSortCommand, ElementName=MyDataGrid}" /> </DataGridTemplateColumn.Header> <DataGridTemplateColumn.CellTemplate> <DataTemplate> <TextBlock Text="{Binding Names}" /> </DataTemplate> </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> </DataGrid>
额外验证点
确保ViewModel中的IMvxSortCommand是public可访问的,并且正确初始化,示例代码如下:
public IMvxCommand IMvxSortCommand { get; private set; } public YourViewModel() { IMvxSortCommand = new MvxCommand(ExecuteSort); } private void ExecuteSort() { // 这里编写你的排序逻辑 }
内容的提问来源于stack exchange,提问作者smeikey
相关产品推荐
相关产品推荐

