2010-08-06 90 views
3

我用我的視圖模型下面的代碼刪除項目從集合中:取消刪除動作 - NotifyCollectionChangedAction

UnitMeasureCollection.CollectionChanged += new NotifyCollectionChangedEventHandler(ListOfUnitMeasureCollectionChanged); 

void ListOfUnitMeasureCollectionChanged(object sender, NotifyCollectionChangedEventArgs e) 
{ 
    if (e.Action == NotifyCollectionChangedAction.Remove) 
    { 
     if (NavigationActions.DeleteConfirmation("Delete Item.", "Are you sure you want to delete this item? This action cannot be undone.")) 
     { 
      foreach (UnitMeasureBO item in e.OldItems) 
      { 
       UnitMeasureBO unitMeasureBO = item as UnitMeasureBO; 
       bool inUse = unitMeasureRepository.UnitMeasureInUse(unitMeasureBO.UnitMeasureValue); 
       if (inUse == true) 
       { 
        NavigationActions.ShowError("Cannot delete item", "This item cannot be deleted because it is used elsewhere in the application."); 
       } 
       else 
       { 
        unitMeasureRepository.DeleteUnitMeasure(unitMeasureBO.UnitMeasureValue); 
       } 
      } 
     } 
    } 
} 

我有一個綁定到集合的數據網格。我想知道是否有基於確認提示取消刪除操作?我注意到NotifyCollectionChangedEventArgs沒有取消方法。會發生什麼情況是當用戶從數據網格中刪除一個項目,但在確認中選擇了「否」時,該項目仍然從數據網格中刪除。它不會從數據庫中刪除,如果數據網格被刷新,它會再次出現。我使用mvvm模式,我更喜歡這樣做,而不必編寫我的數據網格。任何幫助表示讚賞。

回答

6

那麼,在CollectionChanged事件中,您無法取消刪除操作。

我的建議:如果您使用的是MVVM,您應該在DataGrid中按下DeleteKey時觸發某個DeleteCommand。在此命令的Execute()方法中,您應該:

  1. 請求確認。
  2. 如果用戶選擇是,則從集合中刪除該項目。此刪除應直接反映在DataGrid上。
  3. 如果用戶選擇否,則不執行任何操作。

這意味着,雖然DataGrid.CanUserDeleteRows設置爲False,因爲您基本上必須控制何時刪除行。

希望這會有所幫助。

+0

這就是我的想法。儘管我喜歡你對刪除命令的想法。謝謝! – steveareeno 2010-08-09 19:43:25