【问题标题】:Silverlight tri-state checkbox databinding to object property calculating valueSilverlight 三态复选框数据绑定到对象属性计算值
【发布时间】:2012-05-07 13:25:33
【问题描述】:

所以我遇到了这个小问题:

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

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

  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
    

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

可能是什么问题?

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

【问题讨论】:

    标签: silverlight data-binding binding checkbox


    【解决方案1】:

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

    • 检查 == 正确
    • 未选中 == 错误
    • 不确定 == null

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

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

    【讨论】:

    • 我没有提到,我已经有属性“AllowedTo.Create”,女巫的类型是可空的(布尔值)。它从这个整数属性来回转换这个值。但是当它返回NOTHING时,复选框应该显示不确定,但它只是保持未选中状态。如果我的属性返回 true 或 false,那么它可以正常工作
    • 1) 属性不是转换器...使用转换器转换绑定处的值。
    • 2)它不能像你说的那样返回“NOTHING”,它可以返回一个值或抛出一个异常,该值可以为null,但它不是NOTHING
    • 3) 我很确定绑定到可为空布尔值的三态复选框 2 方式在 Silverlight 中工作,因为我正在开发需要的解决方案。也许您使用的是相当旧的 SL 版本?如果我没记错的话,我在 SL4 中开发这个项目时。
    • 4) 如果它仍然不起作用,那么您的代码中肯定有另一个错误,我不能这样,发布您的 XAML 复选框,转换器和属性它一定会,然后我会查看它并帮助您找出问题所在。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-07
      • 2015-10-15
      • 2011-08-22
      相关资源
      最近更新 更多