命令绑定到DataTemplate内的按钮不起作用

时间:2018-02-20 21:02:33

标签: wpf button command datatemplate

示例:

<ListBox Name="List" 
             ItemsSource="{Binding Items}" 
             SelectedIndex="{Binding SelectedIndex}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel >
                    <Button DockPanel.Dock="Left" Content="Show" Command="{Binding ShowCommand}" CommandParameter="{Binding}"/>
                    <TextBlock Text="{Binding }"/>
                </DockPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

单击该按钮不执行任何操作。我试图将命令绑定到DataTemplate之外的按钮,它可以工作。我还尝试将DataTemplate中的按钮注册到Click_event,这确实有效。

为什么命令在DataTemplate中不起作用?

1 个答案:

答案 0 :(得分:4)

由于命令是在ListBox的{​​{1}}中定义的,因此请使用DataContext绑定来帮助RelativeSource找到命令:

Button

或使用<ListBox.ItemTemplate> <DataTemplate> <DockPanel > <Button DockPanel.Dock="Left" Content="Show" Command="{Binding DataContext.ShowCommand,RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type ListBox}}}" CommandParameter="{Binding}"/> <TextBlock Text="{Binding }"/> </DockPanel> </DataTemplate> </ListBox.ItemTemplate> 绑定:

ElementName