无法使用 DataTemplates 中的 x:Bind 绑定到按钮事件 - 生成 XAML 错误
Cannot bind to button events using x:Bind in DataTemplates - generates XAML error
如果方法满足以下要求,您可以使用 {x:Bind}
标记语法绑定到事件:
- 匹配事件的签名。
- OR 没有参数。
- 或者具有相同数量的可从事件参数类型分配的类型参数。
这在 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>
似乎您需要将它放在容器中才能正常工作。我不知道为什么我在猜测魔法。
如果方法满足以下要求,您可以使用 {x:Bind}
标记语法绑定到事件:
- 匹配事件的签名。
- OR 没有参数。
- 或者具有相同数量的可从事件参数类型分配的类型参数。
这在 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>
似乎您需要将它放在容器中才能正常工作。我不知道为什么我在猜测魔法。