绑定到WinRT中的当前源(" {Binding。}")

时间:2014-11-20 17:19:28

标签: winrt-xaml

在WPF中,如果我想在绑定中引用整个对象(不是特定属性),我可以编写以下任何内容:

  • {Binding Path=.}
  • {Binding .}
  • {Binding}

像这样:

<ItemsControl ItemsSource="{Binding Widgets}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <controls:WidgetControl Widget="{Binding}"/>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

但是在WinRT中,我无法让它工作:

<GridView ItemsSource="{Binding Source={StaticResource Widgets}}">
    <GridView.ItemTemplate>
        <DataTemplate>
            <controls:WidgetControl Widget="{Binding}"/>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

它失败了一个非常模糊的例外:

The text associated with this error code could not be found.
Failed to assign to property 'XX.WidgetControl.Widget'. [Line: XX Position: XX]

ItemsSource绑定有效,因为每个DataContext的{​​{1}}设置为controls:WidgetControl。我知道明显的答案就是等待设置Widget并将其转换为我的widget控件中的DataContext。但我原则上问:为什么在WinRT中没有自我约束力的工作......或者有没有让它工作的符号?

1 个答案:

答案 0 :(得分:0)

事实证明{Binding}效果很好。我在DataContext中错误地设置了WidgetControl,导致绑定失败并让我相信WinRT绑定机制有问题。

要明确的是,{Binding .}仍然没有像我在WPF中所做的那样工作。它将点解释为文字属性名称,而不是对self的引用:

Error: BindingExpression path error: '.' property not found on 'Widget'. BindingExpression: Path='.' DataItem='Widget'

但我的实际问题是尝试在我的WidgetControl的根级别更改DataContext,导致任何外部绑定失败。因为我将我的控件定义为<UserControl x:Name='controlRoot' DataContext="{Binding ElementName=controlRoot}<controls:WidgetControl Widget="{Binding}"/>中的绑定引用了WidgetControl本身,而不是我试图传入的Widget。&#34;没有分配到财产&#34;异常是由属性更改的处理程序引发的,该处理程序期望Widget,而不是WidgetControl

因此,您绝对可以使用{Binding}来引用绑定所在事物的DataContext,而不是尝试将路径设置为&#34; .&#34;