2014-09-10 6 views
0

목록보기가 Mode=TwoWay으로 설정되어 있습니다. 기본 데이터가 변경된 경우보기를 새로 고쳐야한다고 생각했습니다.ListView 항목을 삭제하는 경우 업데이트되지 않습니다.

그러나 항목을 올바르게 삭제하는 동안 페이지를 종료하고 돌아올 때까지 항목이 목록에 남아 있습니다.

XAML : 코드 뒤에

<ListView ItemsSource="{Binding Path=items, Mode=TwoWay}" > 
    <DataTemplate> 
     ... 

     <Button x:Name="btn_delete_item" Click="btn_delete_item_Click" > 

     </Button> 

:

private void btn_delete_item_Click(object sender, RoutedEventArgs e) 
    { 
     Button button = sender as Button; 
     itemType item = button.DataContext as itemType; 

     items.Remove(item); 
    } 
+0

'모드 = TwoWay'가 필요하지 않습니다,하지만'items' 컬렉션 변경에 대해 통보해야합니다. 이를 달성하기 위해 ObservableCollection을 사용할 수 있습니다. – Clemens

+0

@Clemens 내'items'는 단지'List '입니다. 나는 ObservableCollection에 대해 읽을 것이다. Im suprised List는 데이터 바인딩을 완벽하게 지원하지 않습니다. – Mcloving

+0

그리고 C#의 (공개) 식별자에 대한 [명명 규칙] (http://msdn.microsoft.com/en-us/library/ms229043.aspx)이 있습니다. 타입과 속성 모두'camelCasing'이 아니라'PascalCasing'을 사용해야합니다. – Clemens

답변

2

완전히 항목이 추가 여부, 제거, 교체 또는 이동 즉 당신의 Items 컬렉션, 변경에 대해 통지해야합니다, 데이터 바인딩을 지원하기 위해 . 이 알림은 INotifyCollectionChanged 인터페이스를 구현하여 수행됩니다. 프레임 워크의 List<T> 유형은이 인터페이스를 구현하지 않지만 ObservableCollection<T> 유형은이 인터페이스를 구현하지 않습니다.

그래서 당신은 단순히 당신의 Items 속성의 유형 변경할 수 있습니다 :

public ObservableCollection<ItemType> Items { get; set; } 
+0

귀하의 의견을 토대로이 것을 시도했습니다. 그리고 그것은 훌륭하게 작동합니다. 심지어 목록에서 제거하는 멋진 애니메이션이 있습니다. 'items'을 설정할 때'new ObservableCollection (myitemlistsource)'를 사용하여 캐스팅했습니다. – Mcloving

관련 문제