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

时间:2015-09-29 17:21:10

标签: xaml binding windows-store-apps winrt-xaml xbind

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

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

这在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>

2 个答案:

答案 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来关闭任何设计时操作。