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(带有标题头),所以我宁愿不必抛弃它,如果可能的话。
非常感谢您提前寻求帮助。
答案 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>