2014-12-01 88 views
0

我有一個嵌套的Listbox(主對象列表中的對象的集合)需要刪除基礎項目。
刪除項目時,我可以重置主列表的ItemsSource,但主列表將包含大量項目,並且每次從其基礎集合中刪除項目主滾動條也將被重置,使用戶願意以非常痛苦的方式殺死我。
我的問題:我如何才能找到已被點擊了哪個按鈕項目的容器,我怎麼能找到該項目本身,所以我可以殺@ & $ * &#$ @(咒罵象聲詞)!?
下面是我列出的XAML爲例:從按鈕上的嵌套ListView中刪除ListItem點擊

<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

你可以有一個命令,並把它傳遞您的項目作爲參數,而不是一個單擊處理程序:

<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); 
+0

是不是最花哨的方法,但似乎已經解決了我的問題!感謝名單! – 2014-12-08 17:20:29