我有一个Listbox,其中每个项目都是Usercontrol MatchPanel。 那个UserControl有一个按钮。 我想点击该项目的按钮时删除一个项目。 我使用了绑定到我的ViewModel的SelectedItem,效果很好。但有时我可以点击一个项目的按钮而不移动SelectedItem值(即使我点击该项目的按钮,列表框项目也不会聚焦...)。 因此,我正在寻找一种方法在命令CloseSelectedMatchCommand中接收一个参数,该参数告诉我,对于我点击的按钮,它是Listbox的哪个索引。 感谢
这是我的观点
<UserControl
DataContext="{Binding ListTradingMatches, Source={StaticResource Locator}}" Height="503.175" Width="409">
<ListBox ItemsSource="{Binding Path=ListMatches}" SelectedItem="{Binding Path=SelectedMatch}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<local:MatchPanel />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
这是我的MatchPanel UserControl
<UserControl x:Class="MatchPanel"
<Label Content="Pts"/>
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListBox}},
Path=DataContext.CloseSelectedMatchCommand}" CommandParameter="{Binding}">
</Button>
</Grid>
答案 0 :(得分:0)
您可以将DataContext
的{{1}}设置为UserControl
中的项目:
DataTemplate
现在<DataTemplate>
<StackPanel>
<local:MatchPanel DataContext="{Binding}" />
</StackPanel>
</DataTemplate>
设置为集合中的项目,您可以将DataContext
设置为该对象的相关属性...:
CommandParameter
......,或者只是整个对象:
<Button Command="{Binding RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type ListBox}}, Path=DataContext.CloseSelectedMatchCommand}"
CommandParameter="{Binding Id}" />