WPF как привязать к ICommand.CanExecute () - PullRequest
1 голос
/ 16 января 2020

По сути, я сталкиваюсь с очень похожей проблемой на вопрос WPF - как скрыть пункт меню, если команда CanExecute имеет значение false? , принятый ответ использует умный обходной путь для привязки к IsEnabled вместо CanExecute() результат. Увы, IsEnabled обходной путь не будет работать в моем случае :
У меня есть коллекция KeyBinding, собранных из VisualTree во время события PreviewGotKeyboardFocus из различных элементов управления, поэтому я могу иметь нет предположения, отключен ли исходный элемент привязки клавиш по какой-либо другой причине (например, IsBeingLoaded привязка), или даже если элемент вообще не отключен (например, Grid не отключается, если не может выполнить его KeyBinding с). Как я могу привязаться к текущему CanExecute() значению KeyBinding.Command?

public class ContextHelperVM : ViewModelBase 
{
    public ObservableCollection<KeyBinding> ContextEffectiveKeybindings { get; }
    // KeyBinding list loading, maintaining, etc. pseudocode
    // Keybindings = FocusedElement.TraverseToParentWidnow().GatherKeyBindings();
}

в ContextHelperView.xaml Я хотел бы установить непрозрачность для неисполняемого KeyBindings

<ItemsControl ItemsSource="{Binding ContextEffectiveKeybindings}">
   <ItemsControl.ItemTemplate>
      <DataTemplate>
         <TextBlock Text="{Binding Key}"/>
         <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Command.????}" Value="False"><!--how to bind here??-->
               <Setter Property="Opacity" Value="0.5">
            <DataTrigger>
         </DataTemplate.Triggers>
      </DataTemplate>
   </ItemsControl.ItemTemplate>
</ItemsControl>

Как я могу исправить код так, чтобы Непрозрачность была правильно установлена ​​на KeyBinding.Command с, которые не могут быть выполнены?

...