使用传统的 {Binding} 语法时,您可以指定元素名称以指向页面上的特定控件,并能够访问其属性。例如,如果页面名为page
你可以这样做:
{Binding ElementName=Page, Path=Name}
随着{x:Bind}它说的语法
使用 x:Bind,您不需要使用 ElementName=xxx 作为
结合表达。通过 x:Bind,您可以使用元素的名称
作为绑定路径的第一部分,因为命名元素
成为代表根的页面或用户控件中的字段
绑定源。
因此,对于上面的例子,{x:Bind} 将是
{x:Bind page.Name}
这工作正常,直到它位于数据模板内(例如 ListView 的 ItemTemplate)。在这种情况下,它不再像它所寻找的那样工作Page
在指定的数据类型上,这会导致以下错误(假设我的数据类型是customer
):
XamlCompiler 错误 WMC1110:无效的绑定路径“Page.Name”:
在“客户”类型上找不到属性“页面”
将 {x:Bind} 语法与数据模板和数据模板外部的访问控制结合使用的解决方案是什么?
示例代码可用here(注意具体提交)
据我所知,目前还没有办法使用 x:bind 方法直接绑定到控件的属性,因为它不支持其绑定定义中的元素名称。
这并不意味着您不能绑定到 dataTemplate 内的控件,您仍然可以执行类似的操作来访问控件,但您只是无法使用已编译的绑定 x:Bind 语法。
<DataTemplate x:DataType="local:Customer">
<StackPanel Orientation="Vertical">
<Button Content="{Binding Name, ElementName=page}" />
<TextBlock Text="{x:Bind Title}" />
</StackPanel>
</DataTemplate>
您收到错误的原因是数据模板作为其数据源的父级的方式所致。 x:Bind 绑定无法引用控件对象,并且您的 Customer 类型可以引用 Page.Name 属性或路径。如上所示,仅使用 XAML 访问控件外部的用户控件属性的唯一真正方法是诉诸标准绑定机制。
我希望这回答了你的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)