1

XAML:

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

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

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

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

非常感谢您的任何帮助。

4

2 回答 2

2

您可以通过CommandParameter将每个项目的DataContext发送到命令

 <Button Command="{Binding DeleteFoo}" CommandParameter={Binding}>Delete</Button>
于 2013-02-28T14:02:39.527 回答
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>
于 2013-02-28T14:03:31.333 回答