小编Ale*_*oks的帖子

WPF CommandParameter绑定和canExecute

我有一个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>
Run Code Online (Sandbox Code Playgroud)

作为DataContext,我有一个ID为非空字段的linq实体.

问题是:如果我使用CanExecutedMethod的DelegateCommand'Add':

AddRate = new DelegateCommand<int?>(AddExecute,AddCanExecute);
Run Code Online (Sandbox Code Playgroud)

它只调用一次,参数为null(而textBlock显示正确的ID值).在调用ID属性之前调用CanExecute(使用调试器检查).似乎在绑定到实际参数之前,wpf正在调用canExecute并忘记它.绑定完成并加载正确的值后,它不会再次调用CanExecute.

作为一种解决方法,我可以使用只有执行委托的命令:

Add = new DelegateCommand<int?>(AddExecute);
Run Code Online (Sandbox Code Playgroud)

使用正确的ID值调用AddExecute并且工作正常.但我仍然想使用CanExecute功能.有任何想法吗?

c# wpf delegatecommand

6
推荐指数
1
解决办法
9034
查看次数

标签 统计

c# ×1

delegatecommand ×1

wpf ×1