2014-05-10 72 views
0

我想要IEnumerable集合與ListView中的項目綁定。我也想製作一個可以從中刪除所選元素的按鈕。有沒有一種方法可以製作一個按鈕,並且當它被點擊時,從列表和集合中刪除所選元素?WPF從列表視圖中的綁定集合中刪除元素

+0

你嘗試過什麼嗎?請花時間閱讀[How to ask](http://stackoverflow.com/help/how-to-ask)文章。 – Clemens

+0

是的,當然有辦法做你所描述的。閱讀的一個很好的起點是MSDN上的這篇how-to文章(http://msdn.microsoft.com/en-us/library/aa970558.aspx),當然還有關於MVVM的數百篇文章在網上找到。 – Clemens

回答

1

有幾種創建WPF應用程序的方式,我不確定您是否使用MVVM模式,但這在整個板子上會相對相同。請注意,有很多方法可以實現這一點,這只是其中之一。

假設您有一個 Person類型。您可以將其從XAML部分或代碼隱藏在視圖的代碼隱藏文件或單獨的ViewModel文件中。無論哪種方式,您最終都會得到一個控件,如ListView,它能夠告訴您正在選擇的項目以及正在顯示的值。在我的ViewModel(或簡單的窗口的代碼隱藏),與選擇工作時,我一般喜歡知道集合中被選擇的項目,所以我有這樣的特性:

// Here we are assuming that my item collection is of type Person. 
private Person _selectedItem; 
public Person SelectedItem 
{ 
    get { return _selectedItem; } 
    set 
    { 
     if (_selectedItem == value) 
     { 
      return; 
     } 

     _selectedItem = value; 
     OnPropertyChanged("SelectedItem"); 
    } 
} 

請注意,您必須實現您的ViewModelINotifyPropertyChanged或代碼後面得到更新什麼已經改變:

public event PropertyChangedEventHandler PropertyChanged; 

private void OnPropertyChanged(string name) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 
    if (handler != null) 
    { 
     handler(this, new PropertyChangedEventArgs(name)); 
    } 
} 

...並綁定到SelectedItem財產我在你ListView(內XAML)上面顯示:

​​

所以,每當我想從我的收藏中刪除一個項目,我只是運行是這樣的:

private void Remove() 
{ 
    if (SelectedItem == null) 
    { 
     return; 
    } 

    collection.Remove(SelectedItem); 
} 

有許多方法,但是這是我要做的事。你甚至可以去更具體的做這樣的事情:

collection.RemoveAll(x => x.SSNNumber == SelectedItem.SSNNumber); 

這真的取決於你有多創意和具體你得到。你沒有給我們很多細節,所以我在這裏猜測你的需求。

我肯定不會依賴於index,因爲如果你在XAML中排序,而不是在你的code-behind/ViewModel中排序,那麼你在刪除過程中會得到錯誤的index。如果您選擇index路由,您應該在代碼中進行排序,如果您的綁定正確完成,那麼使用XAML的集合將更新爲正確的順序,並且所選項目將具有適當的索引。然而,這是一條糟糕的路線,所以我建議不要這樣做。