【发布时间】:2011-04-03 17:12:37
【问题描述】:
我有一个 WPF 用户控件,其中包含一个带有 5 个按钮的工具栏。按钮的 for 的命令在父窗口中处理,但第五个按钮的命令由 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->Toolbar 按钮
图像会根据命令参数(本例中为 Url)是否为空而更改,并且此方法有效。但是,该按钮始终处于禁用状态。导致它启用的唯一原因是切换到父选项卡控件中的另一个选项卡,然后使用按钮返回到选项卡。
我试过调用 CommandManager.InvalidateRequerySuggested();当数据上下文发生变化并为命令添加“CanAlwaysExecute”处理程序时,但当我调用 CommandManager.InvalidateRequerySuggested(); 时 CanExecute 处理程序没有执行。
【问题讨论】: