获取对HeaderedItemsControl中的项的引用

时间:2013-02-28 13:37:03

标签: wpf listview mvvm datatemplate headereditemscontrol

XAML:

<HeaderedItemsControl ItemsSource="{Binding FooCollection}">
<HeaderedItemsControl.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <TextBlock Text={Binding foo}/>
            <Button Command="{Binding DeleteFoo}">Delete</Button>
        </StackPanel>
    </DataTemplate>
</HeaderedItemsControl.ItemTemplate>

鉴于此XAML,如何在DeleteFoo命令&amp;中获取对FooCollection中单击的项的引用。方法,在ViewModel中?通常在DataGrid等中,它只是ViewModel中绑定的SelectedItem,但令人讨厌的是HeaderedItemsControl没有此选项。

是否有另一种方法可以通过CommandArguments传递对项目的引用或其在FooCollection中的索引位置?

我意识到ListView是一个类似的控件,它有一个selectedItem等价物,但是我已经设置了一个格式良好的HeaderedItemsControl(带有标题头),所以我宁愿不必抛弃它,如果可能的话。

非常感谢您提前寻求帮助。

2 个答案:

答案 0 :(得分:2)

您可以通过CommandParameter

将每个项目的DataContext发送到命令
 <Button Command="{Binding DeleteFoo}" CommandParameter={Binding}>Delete</Button>

答案 1 :(得分:2)

无论如何我会把它作为答案.. ItemsControls将ListItem的DataContext设置为它们所代表的对象,这样你就可以使用

获得对被点击项目的引用。
<HeaderedItemsControl ItemsSource="{Binding FooCollection}">
<HeaderedItemsControl.ItemTemplate>
    <DataTemplate>
        <StackPanel>
            <TextBlock Text={Binding foo}/>
            <Button Command="{Binding DeleteFoo}" CommandParameter={Binding}>Delete</Button>
        </StackPanel>
    </DataTemplate>
</HeaderedItemsControl.ItemTemplate>