, если вашему конвертеру нужен экземпляр CurrentChildViewModel
, тогда свяжитесь с ним, а не с командой (удалите .CanExecuteCompactCommand
)
Тем не менее, с какой стати вы используете одну команду, чтобы определить, должна ли другая команда быть в состоянии выполнить? Вы должны использовать CanExecute вашей команды (CompactCommand
).
<Ч />
Хорошо, я думаю, что теперь понимаю вашу настоящую проблему.
Если я прав, то ваши xaml / bindings работают как положено, если только CurrentChildViewModel
или CanExecuteCompactCommand
не равны нулю. (при условии, что вы удалите конвертер.)
Чтобы решить эту проблему, вы можете добавить FallbackBalue=false
к вашей привязке, это говорит привязке использовать false
, когда она не может найти источник. А также добавьте TargetNullValue=false
, что говорит привязке использовать false
, когда источник равен нулю (CompactCommand
в этом случае)
Так это будет выглядеть так:
IsEnabled="{Binding CurrentChildViewModel.CanExecuteCompactCommand,
FallbackValue=false,
TargetNullValue=false}"
Тем не менее, я по-прежнему не рекомендую использовать команду для определения, может ли другая команда выполняться. Я хотел бы сделать что-то вроде этого:
, например
<Style TargetType="{x:Type MenuItem}" x:Key="menuItemWithCommand">
<Style.Triggers>
<Trigger Property="Command" value="{x:Null}">
<Setter Property="IsEnabled" Value="False"/>
</Trigger>
</Style.Triggers>
</Style>
...
<MenuItem Header="_Compact"
Style="{StaticResource menuItemWithCommand}"
Command="{Binding Path=CurrentChildViewModel.CompactCommand}" />
...
CompactCommand= new RelayCommand(CompactCommandExecuted, CompactCommandCanExecute);
private void CompactCommandExecuted(obejct obj)
{ // Do your business
}
private bool CompactCommandCanExecute(object obj)
{
// return true if the command is allowed to be executed; otherwise, false.
}