Sha*_*huv 4 wpf command button 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>
Run Code Online (Sandbox Code Playgroud)
单击按钮什么也不做。我试图将命令绑定到 外面的按钮DataTemplate并且它起作用了。我还尝试将按钮注册DataTemplate到 a 中Click_event,这确实有效。
为什么该命令在 DataTemplate 中不起作用?
由于 Command 是在ListBox's 中定义的DataContext,因此可以使用RelativeSourceBinding 来帮助Button定位 Command:
<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>
Run Code Online (Sandbox Code Playgroud)
或者使用ElementName绑定:
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel >
<Button DockPanel.Dock="Left" Content="Show" Command="{Binding DataContext.ShowCommand,ElementName=List}" CommandParameter="{Binding}"/>
<TextBlock Text="{Binding }"/>
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)