0

所以我有这个小问题使它起作用:

  1. 我有 Silverlight 客户端应用程序,该应用程序具有自定义用户控件和三态复选框和双向绑定
  2. 用户更改复选框值后,属性底层函数将值转换为整数:

       -1 nothing
        0 false
        1 true
    
  3. 用户从对话框保存数据后,所有数据(复杂对象)都被序列化并发送到 Web 服务并存储在 SQL 数据库中。

  4. 当客户端请求从 web 服务返回保存的数据时,它会返回该对象 OK
  5. 当我尝试将返回的反序列化对象(EA)绑定回复选框时,如下所示:

           With cC
               Dim b As New Binding("AllowedTo.Create")
               b.Source = EA
               b.Mode = BindingMode.TwoWay
               .SetBinding(CheckBox.IsCheckedProperty, b)
           End With
    

只有当值是真或假时它才能正常工作,但如果值什么都不是,因为复选框是三态的,它应该转向第三个状态 - 未定义 - 带有减号 [-],但它不存在。它只是停留在错误状态 - 没有检查是空的,就像它是错误的一样。

可能是什么问题呢?

对不起我的英语,它不是我的母语

4

2 回答 2

1

不要为此使用整数,请使用 Nullable Bool (Bool?)。两种方式绑定效果很好,它转换:

  • 已检查 == 真
  • 未选中 == 假
  • 不确定 == 空

序列化不是可空 bool 的问题,实际上您甚至不必检查 SQL 字段值是否为 NULL,因为它将是一个有效状态,并且在 SQL 数据库中使用 bool 字段甚至会减小它的大小一点点 ;)

如果您的数据库已设置,并且您无法更改它,请编写一个转换器将您的整数转换为可空的布尔值以进行绑定,不应该超过 2 分钟。

于 2012-05-08T15:01:38.113 回答
0

由于这种技术实际上是复选框的原生技术,因此我建议创建一个自定义控件来处理该布尔值的 3 种不同状态。

于 2012-05-07T20:43:45.623 回答