【发布时间】:2018-01-09 13:43:46
【问题描述】:
说明
-
目标: 在我的 wpf 桌面应用程序中,我想将
AccessText添加到绑定到命令的按钮,该命令具有评估窗口/控件是否繁忙并因此启用/禁用按钮的谓词. -
状态: 按钮命令工作正常,并且在添加
AccessText之前已正确启用。 (我使用 MvvmLight 来支持我的 ICommand。) -
问题: 添加
AccessText后,命令仍然绑定,但CanExecute似乎不再被查询,并且按钮始终处于启用状态。 (我理想的解决方案是没有代码隐藏,只有 XAML。)
示例
XAML:
工作:
<Button Command="{Binding NavToStoresSearchCmd}" Content="Stores" Height="30"/>
不工作:
<Button Command="{Binding NavToStoresSearchCmd}" Height="30">
<AccessText>S_tores</AccessText>
</Button>
C#(视图模型):
public ICommand NavToStoresSearchCmd { get => new RelayCommand(OnNavToStoresSearch, () => IsNotBusy); }
(IsNotBusy 和 OnNavToStoresSearch 命令的代码可以正常工作,CanExecute 也是如此直到我添加了AccessText。)
【问题讨论】:
-
我看不到你在哪里打电话
RaiseCanExecuteChanged -
很确定
RaiseCanExecuteChanged是 MvvmLight 的一部分。另外,我的代码在添加AccessText之前就可以工作,这让我觉得它被调用了。 -
该命令是否在没有 AccessText 的情况下实际执行,因此,例如,如果您在 OnNavStoresSearch 中设置断点并单击按钮,它会被命中吗?在 getter 中创建
new RelayCommand对我来说似乎有点奇怪,我通常希望在构造函数中创建一个实例然后使用(并且应该如上所述调用 RaiseCanExecuteChanged)。 -
问题没有重现。虽然按钮上的铭文是黑色的,但是按钮不可用,命令没有执行
标签: c# wpf xaml mvvm-light