gpt4 book ai didi

c# - 将事件绑定(bind)到方法,为什么在UWP中有效?

转载 作者:太空狗 更新时间:2023-10-29 21:43:45 25 4
gpt4 key购买 nike

UWP 带来了一种新的DataBinding方式,Compiled Binding,使用{x:Bind}标记扩展,当我发现这个新功能时,我发现我们实际上可以将事件绑定(bind)到方法!

示例:

Xaml:

<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();
}

结果:

enter image description here

并且由于 {x:Bind} 绑定(bind)在运行时进行评估并且编译器生成一些表示该绑定(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;
}
}

编译器似乎知道这是一个有效的绑定(bind),而且它会创建相应的事件处理程序,并在内部调用相关方法。

太棒了!但为什么 ??绑定(bind)目标应该是依赖属性,而不是事件。 The official documentation for {x:Bind}确实提到了这个新功能,但没有解释非依赖属性为什么以及如何成为绑定(bind)的目标,有人对此有深入的解释吗?

最佳答案

嗯,这是“x:Bind”编译绑定(bind)的新特性。

https://msdn.microsoft.com/en-us/library/windows/apps/mt204783.aspx

事件绑定(bind)是编译绑定(bind)的一个新特性。它使您能够使用绑定(bind)指定事件的处理程序,而不必是代码背后的方法。例如:Click="{x:Bind rootFrame.GoForward}".

对于事件,目标方法不能重载并且还必须:

  1. 匹配事件的签名。
  2. OR 没有参数。
  3. 或具有相同数量的可从事件参数类型分配的类型参数。

我猜你的场景完全符合第 2 项。

关于c# - 将事件绑定(bind)到方法,为什么在UWP中有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35188416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com