从可观察集合中删除项目,稍后将其删除

时间:2015-01-31 18:04:42

标签: c# wpf observablecollection

我有一个名为Receiving的类作为绑定到允许用户编辑的窗口的属性。在该类中是一个名为ReceivingDetails的可观察集合,绑定到dataGrid。 ReceivingDetails也绑定到文本框以进行添加和编辑。

当我需要添加项目时,很简单:

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

在用户点击“保存”之前,不会保存任何内容。当发生这种情况时,我检查父和子的脏,并构建一个TRANSACTION,然后提交。我希望所有人都能在失败时回归。工作得很好..

现在我还需要删除细节。我试图绕着去除项目,以便绑定显示它已经消失,但是直到SAVE才真正删除该项目。

如果我只是将它从集合中删除,它就不会在那里进行迭代并进行物理删除。

我正在考虑编写一个特殊的Receiving.DeleteDetail()方法,或者将其从observablecollection中删除并将其保存到"已删除的详细信息列表中... ...然后当保存接收,循环显示"已删除的详细信息"列出并运行SP以真正删除它们。

我是否正常,或者有更好的方法吗?谢谢!

更新 - 部分代码:

datagri的XAML。请注意,它绑定到Receiving中的可观察集合。 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 个答案:

答案 0 :(得分:1)

你有几个可能的解决方案。

  1. 您可以存储原始列表并显示其副本。然后在两个列表上运行比较。
  2. 您可以执行建议并将所有已删除的内容卸载到单独的列表中以通过
  3. 进行解析
  4. 您可以向模型添加属性以将其标记为已删除,然后仅显示排除标记为已删除项目的数据集视图。
  5. 选项1实际上有很多边缘情况,根据您检查的深度,可能会很烦人。选项2可能是最简单的,因为你所要做的就是在persist上运行已删除的列表,或者在取消时添加回列表。选项3甚至更简单,但它需要向模型添加UI逻辑并被视为脏。

    所有的说法和完成,我个人只会选择2作为简单因素。