UWP
使用标记扩展的新方法DataBinding
,当我发现这个新功能时,我发现我们实际上可以将事件绑定到方法!Compiled Binding
{x:Bind}
例子 :
xml:
<Grid>
<Button Click="{x:Bind Run}" Content="{x:Bind ButtonText}"></Button>
</Grid>
代码背后:
private string _buttonText;
public string ButtonText
{
get { return _buttonText; }
set
{
_buttonText = value;
OnPropertyChanged();
}
}
public MainPage()
{
this.InitializeComponent();
ButtonText = "Click !";
}
public async void Run()
{
await new MessageDialog("Yeah the binding worked !!").ShowAsync();
}
结果 :
由于 {x:Bind} 绑定是在运行时评估的,编译器会生成一些代表该绑定的文件,所以我去那里调查发生了什么,所以在 MainPage.g.cs 文件中(MainPage 是有问题的 xaml 文件) 我找到了这个 :
// IComponentConnector
public void Connect(int connectionId, global::System.Object target)
{
switch(connectionId)
{
case 2:
this.obj2 = (global::Windows.UI.Xaml.Controls.Button)target;
((global::Windows.UI.Xaml.Controls.Button)target).Click += (global::System.Object param0, global::Windows.UI.Xaml.RoutedEventArgs param1) =>
{
this.dataRoot.Run();
};
break;
default:
break;
}
}
编译器似乎知道这是一个有效的绑定,而且它创建了相应的事件处理程序,并在里面调用了相关的方法。
这太棒了 !但为什么 ??绑定目标应该是依赖属性,而不是事件。{x:Bind} 的官方文档确实提到了这个新特性,但没有解释为什么以及如何非依赖属性成为绑定的目标,任何对此有深入解释的人?