在Button Click上从嵌套ListView中删除ListItem

时间:2014-12-01 20:08:01

标签: c# wpf xaml listview listviewitem

我有一个嵌套的Listbox(主对象列表中的对象集合),需要删除基础项目 当项目被删除时,我可以重置主列表的ItemsSource ,但主列表将有大量的项目,每次从其基础集合中删除一个项目主滚动条将也被重置,让用户愿意以非常痛苦的方式杀了我 我的问题:如何找到项目的容器哪个按钮已被点击,我怎样才能找到该项目本身所以我可以杀掉@&!$ *&#$ @(诅咒)象声词)?
这是我列表的XAML例子:

<ListView Name="mainList">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Column 1" />
            <GridViewColumn Header="Column 2" />
            <GridViewColumn Header="Column 3" />
            <GridViewColumn Header="Collection column">
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <ListBox ItemsSource="{Binding BindingCollectionProperty}">
                            <ListBox.ItemTemplate>
                                <DataTemplate>
                                    <Grid>
                                        <TextBlock Grid.Column="0" Text="{Binding Item.Property}" />
                                        <TextBlock Grid.Column="1" Text="{Binding Item.AnotherProperty}" />
                                        <Button Content="remove" Grid.Column="2" Click="DeleteClickEvent" />
                                    </Grid>
                                </DataTemplate>
                            </ListBox.ItemTemplate>
                        </ListBox>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

DeleteClickEvent(object sender, RoutedEventArgs e)应该是什么样的?

1 个答案:

答案 0 :(得分:0)

您可以拥有一个命令,并将您的项目作为参数传递而不是单击处理程序:

<Button ... Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type YOURCUSTOMCONTROL}}, Path=DataContext.YOURCOMMAND}"
            CommandParameter="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}}" />

如果你想保留你的事件处理程序,你可以在发件人身上使用两次VisualTreeHelper.GetParent。

ListBoxItem item = VisualTreeHelper.GetParent(VisualTreeHelper.GetParent((DependencyObject)sender)) As ListBoxItem;

BindingCollectionProperty.Remove(item);
相关问题