2015-01-31 2 views
0

사용자가 편집 할 수있는 창에 바인딩 된 속성으로 수신이라는 클래스가 있습니다. 이 클래스에는 dataGrid에 바인딩 된 ReceivingDetails라는 관찰 가능한 컬렉션이 있습니다. ReceivingDetails는 추가 및 편집 할 수있는 텍스트 상자에 바인딩됩니다. 내가 항목을 추가해야하는 경우관찰 가능한 컬렉션에서 항목을 제거하고 나중에 삭제하십시오.

, 그것은 간단하다 : 사용자가 SAVE 딸깍 소리가 날 때까지

theReceiving.ReceivingDetails.Add(new ReceivingDetails()); 

아무것도 저장되지 않습니다. 그 일이 발생하면 부모와 자식에 대해 더러운 지 확인하고 TRANSACTION을 작성한 다음 커밋합니다. 모두 실패로 돌아 가기를 바란다. 훌륭한 ...

이제 세부 정보도 삭제해야합니다. 바인딩을 사라지게 표시하지만 SAVE까지 실제로 항목을 삭제하지 않도록 항목을 제거하는 것에서 머리를 감싸려고합니다.

단순히 컬렉션에서 제거하면 제거 할 수 없으며 물리적으로 삭제할 수 없습니다.

observablecollection에서 제거하고 "삭제 된 세부 정보"목록에 저장하는 특수 Receiving.DeleteDetail() 메서드를 작성하려고합니다. 수신이 저장되면 루프를 통해 "삭제 된 세부 정보"목록 및 SP를 실행하여 실제로 삭제하십시오.

나는 궤도에있다, 또는 이것을하는 더 좋은 방법이 있습니까? 감사!

UPDATE - 코드 중 일부는 다음 datagri에 대한

XAML. 그것은 Receiving 내의 관찰 할 수있는 콜렉션에 묶여 있음을 주목하라. thrReceiving은 윈도우의 PublicProperty입니다.

private ObservableCollection<ReceivingDetail> _ReceivingDetails; 
/// <summary> 
/// A List of the associated Shipment Details 
/// </summary> 
public ObservableCollection<ReceivingDetail> ReceivingDetails 
{ 
    get { return _ReceivingDetails; } 
    set { _ReceivingDetails = value; 
    RaisePropertyChanged(); 
    } 
} 

나는 그 조금 도움이되기를 바랍니다 ...

+1

안녕하세요 pStan, 더 많은 코드를 게시 할 수 있습니까? 하드 당신이 문제를 주위에 머리를 감싸고, 내게 문제가 무엇인지 내 머리를 감싸는 것은 어렵다 : – bas

+0

일부 코드를 추가 ... – pStan

답변

1

당신이 가능한 솔루션의 몇 가지있다 : 여기

  <DataGrid Grid.Row="0" 
       Name="dataGridReceivingDetails" 
       AlternatingRowBackground="LightBlue" 
       SelectionMode="Single" 
       AlternationCount="2" 
       AutoGenerateColumns="True" 
       IsSynchronizedWithCurrentItem="True" 
       IsReadOnly="True" 
       ItemsSource="{Binding theReceiving.ReceivingDetails, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" > 
      </DataGrid> 

은 받기 클래스 내에서 OC이다.

  1. 원본 목록을 저장하고 사본을 표시 할 수 있습니다. 그런 다음 두 목록에서 비교를 실행하십시오.
  2. 제안 된 작업을 수행하고 삭제 된 모든 항목을 별도의 목록으로 분리하여
  3. 으로 모델링 할 수 있습니다. 삭제 된 것으로 표시된 모델에 속성을 추가 한 다음 제외하는 데이터 세트의보기 만 표시 할 수 있습니다 삭제 된 것으로 표시된 항목

옵션 1은 실제로 많은 엣지 케이스를 가지고 있으며 사용자가 확인하는 깊이에 따라 구현하기 까다로운 경우가 있습니다. 옵션 2는 잠재적으로 가장 단순합니다. 삭제 된 목록을 지속적으로 실행하거나 취소시 목록에 다시 추가하기 만하면됩니다. 옵션 3은 더 간단하지만 모델에 UI 로직을 추가해야하며 더티라고 판단됩니다.

모두가 말했듯이 개인적으로 단순성 요소로 옵션 2를 사용합니다.

+0

저스틴은 빠른 답변과 옵션을 제공합니다. 나는 옵션 2쪽으로 기대고있다. – pStan

관련 문제