【问题标题】:Remove Item from an observable collection and Delete it later从可观察集合中删除项目并稍后删除
【发布时间】:2015-01-31 18:04:42
【问题描述】:

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

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

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

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

现在我还需要删除详细信息。我正在努力解决删除该项目的问题,以便绑定显示它已消失,但直到 SAVE 才真正删除该项目。

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

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

我是否步入正轨,还是有更好的方法来做到这一点?谢谢!

更新 - 部分代码:

Datagri 的 XAML。请注意,它绑定到接收中的可观察集合。 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();
    }
}

希望对你有帮助……

【问题讨论】:

  • 嗨 pStan,可以发布更多代码吗?你很难理解这个问题,对我来说很难理解问题是什么:)

标签: c# wpf observablecollection


【解决方案1】:

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

  1. 您可以存储原始列表并显示其副本。然后对两个列表进行比较。
  2. 您可以按照您的建议进行操作,并将所有已删除的内容卸载到单独的列表中进行解析
  3. 您可以向模型添加一个属性,将其标记为已删除,然后仅显示排除标记为已删除的项目的数据集视图。

选项 1 实际上有很多边缘情况,实施起来可能很烦人,具体取决于您检查的深度。选项 2 可能是最简单的,因为您所要做的就是在持久化时遍历已删除的列表,或者在取消时添加回列表。选项 3 甚至更简单,但是它需要向模型添加 UI 逻辑并且被认为是脏的。

总而言之,为了简单起见,我个人只会选择选项 2。

【讨论】:

  • 感谢贾斯汀的快速回答和选择。我倾向于选项 2。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-15
相关资源
最近更新 更多