Binding 小助手

写 Binding 时少花一些时间
调试比较复杂,可以用在一些简单的场合中


# 绑定属性进行表达式计算
<Label Content="{c:Binding A+B+C }" />

<Label Content="{c:Binding A*0.5+(B.NestedProp1/C - B.NestedProp2 % C) }" />

<c:Binding 'A and B or C' />

# 使用静态属性
<TextBox Text="{c:Binding 'local:StaticClass.Prop1 + local:OtherStaticClass.NestedProp.PropB + PropC'}"/>

# 三元表达式
<Button Background="{c:Binding '(A > B ? media:Brushes.LightBlue : media:Brushes.White)'}"/>

# 静态函数
<TextBox Text="{c:Binding 'Math.Sin(Math.Cos(A))'}"/>

# 枚举
<TextBox Text="{c:Binding '(EnumValue == local:CustomEnum.Value1 ? 10 : 20)'}"/>

# 自动 Bool 至 Visibility
<Button Visibility="{c:Binding !IsChecked}" /> 
<Button Visibility="{c:Binding IsChecked, FalseToVisibility=Hidden}" />

# 因为一些 xml 格式的限制,下面符号特殊表示
`&&` --> `and`
`||` --> `or`
`<` --> `less`
`<=` --> `less=`

# 为了表达式安全,将运算符与表达式间隔开,不要连写在一起, 比如下面这样
<TextBox Text="{c:Binding '(A == 2)?IsChecked:IsFull}"/> <!-- wrong -->
<TextBox Text="{c:Binding '(A == 2) ? IsChecked :4 + IsFull}"/> <!-- right -->

# 跟踪信息, 写在 app.config 中
 <system.diagnostics>
    <switches>
      <add name="CalcBindingTraceLevel" value="Information"/>
    </switches>
  </system.diagnostics>

https://github.com/Alex141/CalcBinding
https://www.bilibili.com/video/BV1VmJVz4EFm

上一篇
下一篇