2010-08-06 3 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에는 cancel 메소드가 없습니다. 사용자가 데이터 그리드에서 항목을 삭제하지만 확인에서 '아니요'를 선택하면 해당 항목은 여전히 ​​데이터 그레이드에서 제거됩니다. 데이터베이스에서 삭제되지 않으며 DataGrid가 새로 고쳐지면 다시 나타납니다. mvvm 패턴을 사용하고 있으며 내 DataGrid를 코딩하지 않고이 작업을 수행하는 것을 선호합니다. 어떤 도움을 주셔서 감사합니다.

답변

6

글쎄, CollectionChanged 이벤트 중에는 제거 작업을 취소 할 수 없습니다.

내 제안 : MVVM을 사용하는 경우 DataGrid에서 DeleteKey를 누를 때 트리거되는 DeleteCommand가 있어야합니다. 이 명령의 Execute() 메서드에서 다음을 수행해야합니다.

  1. 확인 메시지를 확인하십시오.
  2. 사용자가 예를 선택한 경우 컬렉션에서 항목을 제거하십시오. 이 제거는 DataGrid에 직접 반영되어야합니다.
  3. 사용자가 no를 선택하면 아무 것도하지 않습니다.

기본적으로 행이 삭제되는 시점을 제어해야하므로 DataGrid.CanUserDeleteRows가 False로 설정되었지만 이는 의미합니다.

희망이 도움이됩니다.

+0

그건 내가 생각한거야. 내가 명령을 삭제에 대한 귀하의 생각을 좋아해. 감사! – steveareeno