UWP中如何实现扩展方法的x:Bind编译绑定?
在UWP的x:Bind中绑定扩展方法的正确方式
你在UWP中尝试用x:Bind绑定扩展方法时遇到编译错误,之前的两种写法都不符合要求,以下是正确的实现方式:
正确的绑定写法
你的类定义、扩展方法以及命名空间引用都没问题,只需要修改DataTemplate中的绑定代码:
方式一:使用$Data明确指定当前数据实例
<DataTemplate x:DataType="ns1:MyClass"> <TextBlock Text="{x:Bind ns2:MyClassExt.GetExtVal($Data)}" /> </DataTemplate>
方式二:使用.简写代表当前数据上下文
<DataTemplate x:DataType="ns1:MyClass"> <TextBlock Text="{x:Bind ns2:MyClassExt.GetExtVal(.)}" /> </DataTemplate>
为什么之前的写法失败
- 第一种写法传入的是
ns1:MyClass类型本身,而扩展方法的第一个参数需要的是该类型的实例,因此编译报错。 - 第二种写法没有传入任何参数,但扩展方法要求必须接收一个
MyClass实例作为第一个参数,自然无法通过编译。
扩展方法本质是静态方法,调用时必须显式传入目标类型的实例作为第一个参数,而$Data或.正好对应当前DataTemplate绑定的MyClass实例,这样就能正确触发扩展方法的调用。
内容的提问来源于stack exchange,提问作者Ben Jasperson
相关产品推荐
相关产品推荐

