我遇到了一个棘手的问题,我想从复选框中获得一些稍微不寻常的行为,但似乎无法弄清楚。欢迎提出任何建议。我想要的行为是:
- CheckBox 已启用并准备好供用户单击,IsChecked 表示存储在数据结构中的绑定(bind) bool 值
- 用户单击 CheckBox 导致点击事件触发,但数据结构中的绑定(bind)值未更新且 CheckBox 的可视化表示未更新,但它被禁用以停止进一步点击
- 点击事件触发消息发送到远程设备,需要一些时间来响应
- 远程设备响应导致数据结构更新为新值,然后绑定(bind)更新 isChecked 状态并重新启用 CheckBox 以供进一步点击
我遇到的问题是,虽然 OneWay 数据绑定(bind)在单击 CheckBox 时不会更新数据结构,但视觉表示确实发生了变化(我认为这很奇怪,IsChecked 现在不应该像指向数据结构中的值)。
我可以撤销 Click() 事件中的更改并在那里禁用,但这非常困惑。我还可以使用数据结构值的 set 属性来设置一个 isEnabled 值,该值也必然会重新启用 CheckBox,但这看起来也很困惑。
有没有一种干净的方法来做到这一点?也许使用派生的 CheckBox 类?如何停止更新视觉表示?
谢谢
埃德
最佳答案
如何将数据绑定(bind)到 IsHitTestVisible属性(property)?
例如,假设采用 MVVM 方法:
- 将 IsReadOnly 属性添加到您的 View 模型,最初设置为 true 以允许点击。
- 将此属性绑定(bind)到 CheckBox.IsHitTestVisible。
- 第一次点击后,更新您的 View 模型以将此值设置为 false,以防止任何进一步的点击。
我没有这个确切的要求,我只需要一个始终只读的复选框,它似乎很好地解决了这个问题。另请注意 Goran 在下面关于 Focusable 属性的评论。
关于c# - C# WPF 中的只读复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/921921/