2014-04-07 4 views
1

Observable Collection 'People'에 바인딩 된 listview가 있습니다. People은 'Name'속성을 가진 사람을 포함하고 있습니다.각 ListView 행에 대한 삭제 버튼

마지막 열에 나타나는이 테이블의 각 행에 대해 삭제 버튼을 갖고 싶습니다. 아래는 작동하는 구현입니다. 그러나 핸들러와 XAML은 매우 얽혀있어서 좋지 않습니다. 내가 삭제 한 사람을 어떻게 통과시킬 수 있습니까?

XAML은 :

<ListView ItemsSource="{Binding People}" Name="ListViewPeople"> 
         <ListView.View> 
          <GridView> 
           <GridViewColumn> 
            <GridViewColumnHeader>Names</GridViewColumnHeader> 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <TextBox Text="{Binding Names}"></TextBox> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
           <GridViewColumn> 
            <GridViewColumn.CellTemplate> 
             <DataTemplate> 
              <Button Content="Delete" Click="Button_Click_Delete"/> 
             </DataTemplate> 
            </GridViewColumn.CellTemplate> 
           </GridViewColumn> 
          </GridView> 
         </ListView.View> 
       </ListView> 

나는이 핸들러와이를 구현하는 데 성공했지만, 당신이 볼 수 있듯이 그것은 백업 코드 뷰에 대해 자세히 알 수 있습니다 의미합니다. ListView에서 삭제 단추의 인덱스를 가져 와서 관측 가능한 컬렉션에서 값을 제거합니다.

C# 코드 :

private void Button_Click_Delete(object sender, RoutedEventArgs e) 
    { 
     DependencyObject dep = (DependencyObject)e.OriginalSource; 

     while ((dep != null) && !(dep is ListViewItem)) 
     { 
      dep = VisualTreeHelper.GetParent(dep); 
     } 

     if (dep == null) 
      return; 

     int index = ListViewPeople.ItemContainerGenerator.IndexFromContainer(dep); 

     People.RemoveAt(index); 
    } 

핸들러가리스트 뷰 것에 대해 알 필요하지 않도록 아마도 내 핸들러에 삭제 한 관찰 수집하는 회원을 전달하는 방법이 있나요 기타?

+0

DataContext = "{Binding}"과 같은 DataContext에 대한 바인딩을 만들고 DataContext에있는 내용을 클릭 확인합니다. 개체가 있으면 그것을 제거 할 수 있습니다. – csharpwinphonexaml

+1

명령과 명령 매개 변수에 대해 알고 있습니다. –

답변

5
Button btn = (Button)sender; 
People.Remove((Person)btn.DataContext); 
+0

FrameworkElement btn = (FrameworkElement) sender; mInfoBean.Remove ((DocBeanInfoView) btn.DataContext); 트릭을하는 것 같다. 내 구현보다 훨씬 낫다. 고마워. MVVM을 조금 더 살펴 봤는데 클릭 핸들러가 전혀 마음에 들지 않으므로 이것을 사용하고 지금은 이전 방식을 고수 할 것입니다. –

관련 문제