c# - C# WPF 中的只读复选框

标签 c# wpf binding checkbox

我遇到了一个棘手的问题,我想从复选框中获得一些稍微不寻常的行为,但似乎无法弄清楚。欢迎提出任何建议。我想要的行为是:

  1. CheckBox 已启用并准备好供用户单击,IsChecked 表示存储在数据结构中的绑定(bind) bool 值
  2. 用户单击 CheckBox 导致点击事件触发,但数据结构中的绑定(bind)值未更新且 CheckBox 的可视化表示未更新,但它被禁用以停止进一步点击
  3. 点击事件触发消息发送到远程设备,需要一些时间来响应
  4. 远程设备响应导致数据结构更新为新值,然后绑定(bind)更新 isChecked 状态并重新启用 CheckBox 以供进一步点击

我遇到的问题是,虽然 OneWay 数据绑定(bind)在单击 CheckBox 时不会更新数据结构,但视觉表示确实发生了变化(我认为这很奇怪,IsChecked 现在不应该像指向数据结构中的值)。

我可以撤销 Click() 事件中的更改并在那里禁用,但这非常困惑。我还可以使用数据结构值的 set 属性来设置一个 isEnabled 值,该值也必然会重新启用 CheckBox,但这看起来也很困惑。

有没有一种干净的方法来做到这一点?也许使用派生的 CheckBox 类?如何停止更新视觉表示?

谢谢

埃德

最佳答案

如何将数据绑定(bind)到 IsHitTestVisible属性(property)?

例如,假设采用 MVVM 方法:

  1. IsReadOnly 属性添加到您的 View 模型,最初设置为 true 以允许点击。
  2. 将此属性绑定(bind)到 CheckBox.IsHitTestVisible。
  3. 第一次点击后,更新您的 View 模型以将此值设置为 false,以防止任何进一步的点击。

我没有这个确切的要求,我只需要一个始终只读的复选框,它似乎很好地解决了这个问题。另请注意 Goran 在下面关于 Focusable 属性的评论。

关于c# - C# WPF 中的只读复选框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/921921/

相关文章:

c# - 在 IEnumerable 上使用 Observable 集合的优缺点

c# - WPF:在附加属性中,如何等待可视化树正确加载?

haskell - 为什么我可以在 Haskell 中将值绑定(bind)到值?

c# - 为什么 Silverlight 绑定(bind)不起作用?

c# - 相机变焦值分配引发 System.Argument 异常

c# - "event"关键字的用途

wpf - 如何在 WPF XAML 中的多重绑定(bind)中使用 stringformat

c# - 在 .Net 4.0 中找不到 JavaScriptSerializer

sockets - 如何保持连接以在不请求的情况下将实时数据发送到远程客户端

c++ - 绑定(bind)C++成员变量: getter/setter or raw pointer?