2015-01-31 85 views
0

我有一個名爲Receiving的類,它是綁定到允許用戶編輯的窗口的屬性。在這個類中有一個名爲ReceivingDetails的可觀察集合綁定到了一個dataGrid。 ReceivingDetails也綁定到用於添加和編輯的文本框。從可觀察集合中刪除項並稍後刪除

當我需要添加一個項目,它很簡單:

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

沒有被保存,直到用戶點擊保存。當發生這種情況時,我檢查父代和子代的骯髒,並建立一個TRANSACTION,然後提交。我希望所有人都在失敗時回滾。工作很好..

現在我需要刪除細節。我試圖圍繞刪除項目,以便綁定將顯示它消失,但不真正刪除該項目,直到保存。

如果我只是從集合中刪除它,它不會在那裏遍歷和物理刪除。

我正在考慮編寫一個特殊的Receiving.DeleteDetail()方法或將它從observablecollection中刪除並將其保存到「已刪除的詳細信息」列表中......然後,當接收被保存時,循環遍歷「已刪除的詳細信息」列表並運行SP以真正刪除它們。

我在軌道上,還是有更好的方法來做到這一點?謝謝!

更新 - 一些代碼:

XAML的datagri。請注意,它綁定到接收中的可觀察集合。 thrReceiving是窗口上的PublicProperty。

  <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:

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 2015-01-31 18:09:35

+0

增加了一些代碼... – pStan 2015-01-31 18:21:59

回答

1

你有一對夫婦的這種可能的解決方案。

  1. 您可以存儲原始列表並顯示其副本。然後在兩個列表上運行比較。
  2. 你可以做你的建議和卸載所有被刪除的到一個單獨的列表,通過
  3. 解析您可以將屬性添加到其標記爲刪除,然後只顯示數據集排除的視圖模型標記爲刪除的項目。

選項1實際上有很多邊緣情況,可能會煩人實施,具體取決於您檢查的深度。選項2可能是最簡單的,因爲您只需執行保留的已刪除列表,或將其添加回取消列表。選項3更簡單,但它需要將UI邏輯添加到模型中,並被認爲是髒的。

所有的說法和我做的,我個人只是選擇2的簡單因素。

+0

感謝賈斯汀的快速回答和選擇。我傾向於選項2。 – pStan 2015-01-31 18:23:33