无法使用 DataTemplates 中的 x:Bind 绑定到按钮事件 - 生成 XAML 错误

Cannot bind to button events using x:Bind in DataTemplates - generates XAML error

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

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

Xaml Internal Error error WMC9999: Object reference not set to an instance of an object.

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

完整示例代码 here.

下面的示例代码片段 - 请注意,第一个按钮(第 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>

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


否则通过设置 Tapped="{x:Bind Clicky, IsDesignTimeCreatable=False}.

关闭任何设计时操作

我能够使用以下代码让它工作:

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

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