我有一个嵌套的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)
应该是什么样的?
答案 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);