我有一个名为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();
}
}
我希望有所帮助...
答案 0 :(得分:1)
你有几个可能的解决方案。
选项1实际上有很多边缘情况,根据您检查的深度,可能会很烦人。选项2可能是最简单的,因为你所要做的就是在persist上运行已删除的列表,或者在取消时添加回列表。选项3甚至更简单,但它需要向模型添加UI逻辑并被视为脏。
所有的说法和完成,我个人只会选择2作为简单因素。