У меня есть шаблон для элемента 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 с идентификатором, а не с нулевым полем.
Проблема заключается в следующем: если я использую DelegateCommand 'Добавить' с CanExecutedMethod:
AddRate = new DelegateCommand<int?>(AddExecute,AddCanExecute);
вызывается только один раз, а параметр имеет значение null (в то время как textBlock показывает правильное значение идентификатора). CanExecute вызывается до вызова свойства ID (проверяется с помощью отладчика). Похоже, что до привязки к фактическому параметру wpf вызывает canExecute и забывает об этом. После завершения привязки и загрузки правильного значения он больше не вызывает CanExecute.
В качестве обходного пути я могу использовать команду только с исполняемым делегатом:
Add = new DelegateCommand<int?>(AddExecute);
AddExecute вызывается с правильным значением идентификатора и работает отлично. Но я все еще хочу использовать функциональность CanExecute. Есть идеи?