我有一个 treeView 项目的模板:
<HierarchicalDataTemplate x:Key="RatesTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=ID}"/>
<Button CommandParameter="{Binding Path=ID}"
Command="{Binding ElementName=CalcEditView, Path=DataContext.Add}">Add</Button>
</StackPanel>
</HierarchicalDataTemplate>
作为一个 DataContext 我有 linq 实体 ID 不是空字段。
问题是:如果我将 DelegateCommand 'Add' 与 CanExecutedMethod 一起使用:
AddRate = new DelegateCommand<int?>(AddExecute,AddCanExecute);
它只调用一次并且参数为空(而 textBlock 显示正确的 ID 值)。CanExecute 在调用 ID 属性之前调用(使用调试器检查)。似乎在绑定到实际参数 wpf 之前调用 canExecute 并忘记了它。一旦绑定完成并加载了正确的值,它就不会再次调用 CanExecute。
作为一种解决方法,我可以使用仅执行委托的命令:
Add = new DelegateCommand<int?>(AddExecute);
AddExecute 使用正确的 ID 值调用,并且运行良好。但我仍然想使用 CanExecute 功能。有任何想法吗?