私は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 として、ID フィールドが null ではない linq エンティティがあります。
問題は: CanExecutedMethod で DelegateCommand 'Add' を使用する場合:
AddRate = new DelegateCommand<int?>(AddExecute,AddCanExecute);
一度だけ呼び出され、パラメーターは null です (textBlock は適切な ID 値を示します)。ID プロパティが呼び出される前に CanExecute が呼び出されます (デバッガーで確認)。実際のパラメーターにバインドする前に wpf が canExecute を呼び出していて、それを忘れているようです。バインドが完了し、適切な値が読み込まれると、CanExecute は再度呼び出されません。
回避策として、デリゲートの実行のみでコマンドを使用できます。
Add = new DelegateCommand<int?>(AddExecute);
AddExecute は正しい ID 値で呼び出され、完全に機能しています。しかし、私はまだ CanExecute 機能を使いたいと思っています。何か案は?