Uno Platform桌面应用DataGrid模板列HyperlinkButton命令绑定问题
问题根源在于DataGrid的CellTemplate内部,DataContext默认是GridData集合里的单个ChildFolder对象,而ChildFolder类并没有定义ChildItemInvokedCommand,所以直接绑定ChildItemInvokedCommand会找不到目标。
下面是两种可行的解决方法:
方法一:通过RelativeSource向上查找DataGrid的DataContext
修改HyperlinkButton的Command绑定,通过RelativeSource找到父级DataGrid的DataContext(也就是你的ViewModel):
<HyperlinkButton Content="{Binding FolderName}" IsDoubleTapEnabled="True" CommandParameter="{Binding}" Command="{Binding DataContext.ChildItemInvokedCommand, RelativeSource={RelativeSource AncestorType=controls:DataGrid}}" />
方法二:通过ElementName绑定Page的DataContext
先给Page添加x:Name属性:
<Page x:Class="MDTSStorageExplorer.Views.StorageAccountsPage" ... x:Name="RootPage">
然后修改HyperlinkButton的Command绑定:
<HyperlinkButton Content="{Binding FolderName}" IsDoubleTapEnabled="True" CommandParameter="{Binding}" Command="{Binding DataContext.ViewModel.ChildItemInvokedCommand, ElementName=RootPage}" />
验证说明
- 你的
CommandParameter="{Binding}"是正确的,会把当前点击的ChildFolder对象传递给命令的执行方法OnChildItemInvoked。 - 确保ViewModel中的
ChildItemInvokedCommand是public的(你的代码已经满足),且继承了正确的命令接口(IAsyncRelayCommand没问题)。
内容的提问来源于stack exchange,提问作者Sri Nivas
相关产品推荐
相关产品推荐

