3

使用{x:Bind}标记语法,您可以绑定到事件,前提是该方法满足以下要求:

  • 匹配事件的签名。
  • 或没有参数。
  • 或具有相同数量的可从事件参数类型分配的类型参数。

这在 DataTemplate 之外工作得很好。一旦绑定发生在 DataTemplate 中,编译器就会生成以下错误:

Xaml 内部错误错误 WMC9999:对象引用未设置为对象的实例。

绑定到 DataTemplates 中的事件的修复方法是什么?

完整的示例代码在这里

下面的示例代码片段 - 请注意第一个按钮(第 2 行)很好,第二个按钮(第 6 行)也很好。如果您注释掉第 6 行并在第 7 行中添加注释,则会发生错误。

 <StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button Tapped="{x:Bind Click}" Content="WORKING"/>
        <ListView ItemsSource="{x:Bind Names}">
            <ListView.ItemTemplate>
                <DataTemplate x:DataType="local:Customer"> 
                    <Button Content="{x:Bind Title}"/>
                    <!--<Button Tapped="{x:Bind Clicky}" Content="{x:Bind Title}"/>-->
                </DataTemplate>
            </ListView.ItemTemplate>
        </ListView>
    </StackPanel>
4

2 回答 2

5

我能够让它与以下代码一起工作:

<DataTemplate x:DataType="local:Customer">
     <StackPanel Orientation="Vertical">
         <Button Tapped="{x:Bind Clicky}" Content="{x:Bind Title}" />
     </StackPanel>
</DataTemplate>

似乎您需要将它放在容器中才能正常工作。我不知道为什么我猜魔术。

于 2015-09-29T19:04:49.460 回答
0

解析器在模板中时无法Clicky从按钮的数据上下文中找到。因为正在传递给模板中按钮的对象(Names父项的 ItemSource 上)与具有Clicky. 您需要绑定Clicky到页面的数据上下文才能使其工作。


否则,通过设置关闭任何设计时操作Tapped="{x:Bind Clicky, IsDesignTimeCreatable=False}

于 2015-09-29T18:08:07.830 回答