【发布时间】:2011-03-30 04:37:54
【问题描述】:
我正在使用 ICommand 接口对我的应用程序中的几个按钮执行绑定,即运行和关闭按钮。我正在使用this 问题中提到的辅助方法将 ICommand 连接到委托,如下所示:
_someCommand = new DelegateCommand(this.DoSomething, this.CanDoSomething);
private ICommand _someCommand;
public ICommand SomeCommand
{
get { return _someCommand; }
}
private void DoSomething(object state)
{
// do something here
}
private bool CanDoSomething(object state)
{
// return true/false here is enabled/disable button
}
这似乎工作得很好,因为在我的实现中,CanDoSomething 返回我在我的应用程序中拥有的属性的值。
如果我将属性的初始值设置为 true,则按钮启用,false 禁用。
我有一系列从应用程序层中的 BackgroundWorker 引发的事件返回到 ViewModel,这些事件根据应用程序的当前状态将属性的值更改为 true 或 false。
我目前遇到的问题是,当我在工作完成后将值设置为 true 时,按钮没有“重新启用”。如果我单击窗口内的某个位置,它将更新。因此,因此,我认为手动刷新窗口将解决我的问题,至少暂时如此。这样做感觉有点恶心,但我有点不知所措。
如果有人有任何建议,我会全力以赴。
感谢您的帮助!
伊恩
编辑 -
有关应用程序本身的更多信息。它在应用程序线程中使用后台工作者来处理“工作”。该应用程序是一个简单的实用程序,用于管理表的创建和将数据加载到表中。我们使用大量预定义的 SQL 脚本来设置我们的测试环境,因此这是一个简单的实用程序,它允许我们根据用户在 UI 中提供的参数来执行此类操作。
希望这会有所帮助,因为当我重新阅读我的问题时,它看起来好像我在 UI 线程中做所有事情,但事实并非如此。进度报告会返回到 UI 线程,并且所有内容都按预期更新,除了按钮..
【问题讨论】: