示例:
<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中不起作用?
答案 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