2012-11-04 24 views
0

所以我有一個listview,它的itemsSource屬性綁定到ObservableCollection,放置在視圖模型上。和一個按鈕在視圖上 我該如何做到這一點,按鈕刪除從列表視圖中選擇的項目,從observableCollection?如何從列表中刪除? MVVM模式定向

+1

你可以使用一個命令功能。 檢查一個答案http://stackoverflow.com/questions/5472071/delete-an-item-in-a-listbox-with-a-button-in-wpf-mvvm –

回答

2

有很多方法可以做到這一點。一種方法是創建一個RelayCommand或參數

<Button Command="{Binding MyDeleteCommand}" 
     CommandParameter="{Binding ElementName=mylistview, Path=SelectedItem}"/> 

你可以去AlSki貼的方式,綁定SelectedItemViewModel和處理命令不帶參數在ViewModel

4

只需再添一DelegateCommand辦法做到這一點:

<ListView ItemsSource="{Binding MyList}"    
      SelectedItem="{Binding SelectedItem}"/> 

<Button Command="{Binding DeleteCommand}"/> 

在您的視圖模型,你有一個名爲SelectedItem屬性,將每次更改時更新選在ListView

現在你可以在ViewModel輕鬆處理刪除:

internal class ViewModel 
{ 
    public ViewModel() 
    { 
     this.DeleteCommand = new RelayCommand(() => this.Delete()); 
    } 
    public void Delete() 
    { 
     this.MyList.Remove(this.SelectedItem); 
    } 
} 

轉到HERE之進一步資料RelayCommand

+0

如果列表包含將有一個錯誤包含重複和用戶選擇刪除第一個副本以外的項目。例如。如果用戶選擇列表「{2,3,4,5,2}」中的最後一項,則該命令將刪除第一項。 – Lightman

+0

_Delete_的含義應該在您的業務案例中定義,並在'Delete'方法中實現。此外,在80%的情況下,刪除第一個匹配項可能是您想要的。 –