10

使用传统的 {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} 语法与数据模板和数据模板外的访问控制一起使用的解决方案是什么?

示例代码可在此处获得(注意特定提交)

4

1 回答 1

13

据我所知,目前无法使用 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 访问控件之外的用户控件属性的唯一真正方法是求助于标准绑定机制。

我希望这回答了你的问题。

于 2015-09-29T18:41:53.840 回答