WPF: команда отключена - PullRequest
       1

WPF: команда отключена

0 голосов
/ 03 апреля 2011

У меня есть пользовательский контроль WPF, который содержит панель инструментов с 5 кнопками. Команды для кнопок обрабатываются в родительском окне, но команда пятой кнопки обрабатывается самим UC. Кажется, что бы я ни пытался, кнопка всегда отключена. Это мой код:

В пользовательском управлении ...

<UserControl.CommandBindings>
<CommandBinding Command="loc:MyAppCommands.OpenUrl" Executed="OpenUrl" />
</UserControl.CommandBindings>

Кнопка, о которой идет речь ...

<l49ui:ImageButton Command="loc:MyAppCommands.OpenUrl" CommandParameter="{Binding}" Text="{lex:LocText MyApp.Core:Strings:OpenUrl}"  ShowText="False" ToolTip="{lex:LocText MyApp.Core:Strings:OpenUrl}" Style="{StaticResource ToolBarButton}" 
           Image="{Binding Url,Converter={StaticResource UrlNotNullConverter},ConverterParameter=image}" IsEnabled="true" /> 

Текст данных для пользовательского элемента управления устанавливается на основе выбора списка; поэтому у меня есть WIndow-> UserControl, привязанный к ListBox-> TabControl-> кнопки панели инструментов

Изображение изменяется в зависимости от того, является ли параметр команды (в данном случае Url) пустым, и это работает. Однако кнопка всегда отключена. Единственное, что вызывает его включение, - это переключение на другую вкладку в элементе управления вкладкой pareent, а затем возврат на вкладку с помощью кнопки.

Я пытался вызвать CommandManager.InvalidateRequerySuggested (); когда текст данных изменяется и добавляется обработчик CanAlwaysExecute для команды, но обработчик CanExecute не выполняется, когда я вызываю CommandManager.InvalidateRequerySuggested ();.

Ответы [ 2 ]

4 голосов
/ 03 апреля 2011

Это может быть проблема с областями фокусировки.Попробуйте явно указать свойство CommandTarget на своей кнопке.Задайте для него элемент внутри вашего пользовательского элемента управления, для которого должны вызываться события Execute и CanExecute (возможно, корневой элемент внутри пользовательского элемента управления).

0 голосов
/ 03 апреля 2011

Возможно, вы обрабатываете событие CanExecute для этой команды в родительском элементе управления? Если событие всплывает на дереве, возможно, в другом месте оно обрабатывается с возвращаемым значением «false», поэтому кнопка отключена. Я бы попытался обработать событие CanExecute в UserControl и установить там точку останова для дальнейшего исследования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...