gpt4 book ai didi

c# - 你如何在 WPF 中手动刷新窗口?

转载 作者:行者123 更新时间:2023-11-30 15:10:13 24 4
gpt4 key购买 nike

我正在使用 ICommand 接口(interface)对我的应用程序中的几个按钮执行绑定(bind),即“运行”和“关闭”按钮。我正在使用 this 中提到的辅助方法将 ICommand 连接到委托(delegate)的问题如下:

_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 时,按钮没有“重新启用”。如果我在窗口内的某个地方单击,它将更新。因此,我认为手动刷新窗口可以解决我的问题,至少暂时如此。这样做感觉有点恶心,但我有点不知道还能尝试什么。

如果有人有任何建议,我会洗耳恭听。

感谢您的帮助!

伊恩

编辑 -

有关应用程序本身的更多信息。它在应用程序线程中使用后台 worker 来处理“工作”。该应用程序是一个简单的实用程序,用于管理表的创建和将数据加载到表中。我们使用大量预定义的 SQL 脚本来设置我们的测试环境,因此这是一个简单的实用程序,允许我们根据用户在 UI 中提供的参数来执行此类操作。

希望这有帮助,因为当我重新阅读我的问题时,它看起来好像我在 UI 线程中做所有事情,但事实并非如此。进度报告返回到 UI 线程,所有内容都按预期更新,除了按钮..

最佳答案

CommandManager.InvalidateRequerySuggested() 可能是答案 - 它告诉所有命令检查它们是否已启用。

关于c# - 你如何在 WPF 中手动刷新窗口?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3489307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com