MVVM Light - UserControls的列表框,如何知道单击按钮的ItemIndex

时间:2014-04-04 10:22:20

标签: c# wpf mvvm listbox selectedindex

我有一个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>

1 个答案:

答案 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}" />