写 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