我在我的WPF应用程序下面的代码,我用它来启用或我的UI禁用按钮WPF CanExecute不会被调用每次
XAML
<Button x:Name="FirstButton" Command="{x:Static local:MyClass.CommandOne}"/>
<Button x:Name="FirstButton" Command="{x:Static local:MyClass.CommandTwo}"/>
代码
背后CommandBindings.Add(new CommandBinding(CommandOne, CommandOne_Executed, CommandOne_CanExecute));
CommandBindings.Add(new CommandBinding(CommandTwo, CommandTwo_Executed, CommandTwo_CanExecute));
public static readonly RoutedUICommand CommandOne = new RoutedUICommand();
public static readonly RoutedUICommand CommandTwo = new RoutedUICommand();
private void CommandOne_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
if (e != null)
e.CanExecute = (_currentValue > 1);
}
private void CommandTwo_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
if (e != null)
e.CanExecute = (_currentValue > 100);
}
工人代码
private async Task DoSomeWork(int value)
{
await Task.Run(() =>
{
// Do some work on value
_currentValue = value
}
}
,我觉得那是什么时候_currentValue变化,由于一些加工值有时CommandOne_CanExecute和CommandTwo_CanExecute功能不会被调用。如果我然后例如移动他们将被调用的UI。我如何确保每次都调用这些函数。
你可以发布_currentValue全属性代码? – Krishna
你有什么理由为什么你使用这些类型的命令?通常他们会进入你的'ViewModel'?我使用自己的'ICommand'实现,它允许我处理何时调用'可以执行改变'。这里是[链接到这样的实现](http://stackoverflow.com/a/22286816/2029607) – XAMlMAX
类似的事情发生在我身上。尝试在执行命令后在代码隐藏中调用'CommandManager.InvalidateRequerySuggested()'。 http://stackoverflow.com/questions/2331622/weird-problem-where-button-does-not-get-re-enabled-unless-the-mouse-is-clicked – MickyD