UWP提供了一个功能类似于Binding的XAML扩展标记——x:Bind。与Binding不同的是,x:Bind扩展标记是在编译阶段完成绑定,可以节省运行阶段的性能开销。正因为如此,x:Bind标记需要强类型的数据源,这意味着,x:Bind标记的绑定上下文不再是对象的DataContext属性,而是Page类与UserControl类,或者它们的派生类。
x:Bind标记的另一个亮点是:它可以直接绑定到方法,该方法可以是静态方法,也可以是实例方法,比较典型的一种应用场景就是将控件的某个事件直接与目标方法进行绑定。
注意,这种绑定方式与直接指定事件处理方法不同,直接指定的事件处理方法必须是当前控件所在的页面或用户控件的类成员,而通过x:Bind标记绑定的方法既可以是页面或用户控件中的成员, 也可以是其他类型中公开的方法(包括实例方法和静态方法)。
当事件需要通过x:Bind标记绑定到某个方法时,这个方法应当满足以下条件:
- 方法返回类型为void。
- 方法没有参数。
- 方法的参数与事件所需要的参数个数、类型以及顺序匹配。
- 方法的参数类型可以兼容事件参数的类型,如方法的两个参数皆为object,这样,传递给事件的参数都可以向该方法的参数赋值。
下面时一个简单的示例:
<StackPanel Margin="20">
<TextBox x:Name="txtBox1" Header="输入单价:" Text="0.00"/>
<TextBox x:Name