使用{x:Bind}
标记语法,您可以绑定到事件,前提是该方法满足以下要求:
这在DataTemplate之外完美无缺。一旦绑定发生在DataTemplate内部,编译器就会生成以下错误:
Xaml内部错误错误WMC9999:对象引用未设置为 对象的实例。
绑定到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>
答案 0 :(得分:5)
我能够使用以下代码:
<DataTemplate x:DataType="local:Customer">
<StackPanel Orientation="Vertical">
<Button Tapped="{x:Bind Clicky}" Content="{x:Bind Title}" />
</StackPanel>
</DataTemplate>
好像你需要把它放在一个容器里才能工作。我不知道为什么我在猜魔术。
答案 1 :(得分:0)
解析器在模板中无法从按钮的datacontext中找到Clicky
。因为传递给模板中按钮的对象(来自父的ItemSource上的Names
的)与具有{{1}的模板外部的对象不同}。您需要将Clicky
绑定到页面的datacontext才能使其正常工作。
否则,请通过设置Clicky
来关闭任何设计时操作。