gpt4 book ai didi

Cocoa 绑定(bind)仅在窗口焦点更改时更新

转载 作者:行者123 更新时间:2023-12-03 16:58:10 26 4
gpt4 key购买 nike

我正在使用 MonoMac 用 C# 构建 Mac 桌面下载管理器。

我的 XIB 有一个 TableView ,其列绑定(bind)到 NSArrayController。阵列 Controller 通过 IBOutlet 连接到我的主窗口 Controller 。该数组包含一堆 HttpDownload 对象,这些对象派生自 NSObject。这些 HttpDownload 对象包含诸如 TotalSizeTotalDownloadedBandwidth 等属性。我用[导出] 属性。

在 Controller 中,我使用 AddObject 方法将一些 HttpDownload 对象添加到 NSArrayController 中。由 Task.Factory.StartNew() 启动的后台进程开始异步下载,并在收到数据时更新绑定(bind)属性,例如 TotalDownloaded 和 Bandwidth。

我可以看到这些新值反射(reflect)在 TableView 中,但只有当我“强制”UI 更新时,例如通过使窗口失去焦点、获得焦点或单击窗口中的按钮,窗口。

我尝试在 IB 中设置“连续更新值”,但这没有什么区别(阅读文档,我认为不应该这样做)。

有谁知道让 UI “实时”更新绑定(bind)值,而不是仅在窗口事件发生时更新?

最佳答案

我在发布这个问题后不久就发现了这一点。

看来需要手动调用WillChangeValue()DidChangeValue()对于至少一个正在更新的 key ,例如,当我更新下载总量时:

WillChangeValue("DownloadedBytes");
DownloadedBytes += bytesRead;
DidChangeValue("DownloadedBytes");

就我而言,仅针对其中一个更新的键调用这些方法似乎足以强制更新所有绑定(bind)值。

仅供引用,在 Objective-C 中这些选择器称为 [self willChangeValueForKey:@"keyname"][self didChangeValueForKey:@"keyname"] .

关于Cocoa 绑定(bind)仅在窗口焦点更改时更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13683842/

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