По сути, я сталкиваюсь с очень похожей проблемой на вопрос 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
с, которые не могут быть выполнены?