You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 23:47:08