C# CanExecute结果更改后控件不刷新

C# CanExecute结果更改后控件不刷新,c#,wpf,commandbinding,C#,Wpf,Commandbinding,在我的窗口中,我有用于加载和保存方法的按钮。我使用CommandBinding,save按钮有一个CanExecute属性,以防止用户在加载数据之前保存数据 CanExecute方法连接到一个名为“canSaveXML”的简单布尔值 我的目的是在加载数据后设置canSaveXML=true,但在值发生更改后控件不会刷新。我读了一些书,发现我必须打电话给CommandManager.InvalidateRequest。我现在这样做了,我的代码如下所示 canSaveXML = true; Comm

在我的窗口中,我有用于加载和保存方法的按钮。我使用CommandBinding,save按钮有一个CanExecute属性,以防止用户在加载数据之前保存数据

CanExecute方法连接到一个名为“canSaveXML”的简单布尔值

我的目的是在加载数据后设置canSaveXML=true,但在值发生更改后控件不会刷新。我读了一些书,发现我必须打电话给CommandManager.InvalidateRequest。我现在这样做了,我的代码如下所示

canSaveXML = true;
CommandManager.InvalidateRequerySuggested();
但控件(按钮)仍不刷新。在我触发UI上的任何内容或最小化/最大化窗口之前,我仍然处于禁用状态。在我这样做之后,按钮被启用

这里怎么了


在MSDN示例中,CommandManager.InvalidateRequestSuggested被调度程序反复调用,但我不相信这是唯一的解决方案。

好的,我自己发现了

canSaveXML = true;
CommandManager.InvalidateRequerySuggested();

是后台工作程序中的代码。不好的。您必须告诉窗口的调度程序调用CommandManager.InvalidateRequestSuggested()

谢谢,你帮我省去了很多麻烦。谢谢你的回答。我在RunWorkerCompleted事件处理程序中添加了CommandManager.InvalidateRequestSuggested()方法,效果非常好!
canSaveXML = true;
CommandManager.InvalidateRequerySuggested();