2009-10-24 1 views
1

ItemsSource가 DataView로 설정된 경우 WPF ListView에서 선택한 ListViewItem을 삭제하는 방법은 무엇입니까? 내가 선택한 ListViewItem을 얻을 수 있고 DataView에서 실제 행을 제거하는 방법은 무엇입니까?DataView에 바인딩 할 때 ListViewItem을 삭제하는 방법

DataView dv = (DataView)myListView.ItemsSource; 
ListViewItem lvi = (ListViewItem)myListView.ItemContainerGenerator.ContainerFromItem(myListView.SelectedItem); 
<Delete ListViewItem here> 

답변

2

컬렉션을 목록보기에 바인딩 할 때 DataView 대신 ListCollectionView를 사용하십시오. 쉽게 (을 dataView 유형의 DataView를의 위치)과 같이 수행 할 수 있습니다

ListCollectionView lcv = (ListCollectionView) myListView.ItemsSource; 
lcv.Remove(myListView.SelectedItem); 

을 그리고 삭제 한 후, 바로보기를 새로 고침 :

ListCollectionView lcv = new ListCollectionView(dataView); 
myListView.ItemsSource = lcv; 

을 이제 모든 객체를 삭제해야하는 경우, 단지 이렇게 :

lcv.Refresh(); 

또는

((ListCollectionView)myListView.ItemsSource).Refresh(); 
0

M-V-VM 패턴을 사용하여 데이터 개체 목록에서 항목을 제거하는 개념을 분리하고 현재 UI 구현에서 직접 제거하십시오. 두 사람은 바인딩을 제외하고는 서로에 대해 알 필요가 없습니다.

MVVM 패턴을 사용할 때 ViewModel에서 부울 "IsSelected"속성을 노출하십시오.

public class SimpleViewModel : BaseViewModel //For INotifyPropertyChanged, etc 
{ 

     public IList<SimpleBusinessObject> ViewModelItems; 

     public SimpleViewModel() 
     { 
      ViewModelItems = new ObservableList<SimpleBusinessObjectViewModel>(); 
     } 

} 

public class SimpleBusinessObjectViewModel 
{ 
     public bool ViewModelIsSelected { get; set; } 

     public SimpleBusinessObjectViewModel() 
     { 
      ViewModelIsSelected = false; 
     } 
} 

다음으로,보기에 이런 식으로 뭔가를 시도 :

<Style TargetType="{x:Type ListViewItem}"> 
     <Style.Triggers> 
       <Setter Property="IsSelected" Value="{Binding ViewModelIsSelected}" 
     </Style.Triggers> 
</Style> 
<ListView ItemsSource={Binding ViewModelItems}> 
     //here you can insert how you want to display a ListViewItem 
</ListView> 

이, 편집을 추가 할 수 있도록하고 뷰 모델의 목록에서 항목을 제거합니다 - 그것은 실제의 ListView 인 것처럼처럼. 여기에서 실제로 ListViewItem을 확인하지 않고도 각 항목의 IsSelected (ListView와의 마우스 상호 작용에 응답 함)를 확인할 수 있습니다. 이것은 훨씬 깨끗하고 유지 보수가 용이 한 솔루션이 될 것입니다.

+0

귀하의 비즈니스 모델은 귀하의 ViewModel에 대해 알고 있습니까? 비지니스 로직과 프리젠 테이션 로직의 정상적인 분리를 뒤집어 놓는 것은 그리 좋은 생각이 아닙니다. – jpierson

+0

좋은 지적. 나는 그 모범을 새롭게 할 것이다. –