如何保持单独集合的属性同步



我有一个WPF应用程序,它的屏幕包含一个带有两个选项卡的选项卡控件。每个选项卡上都有一个数据网格,每个数据网格都绑定到一个ObservableCollection of Part对象。该部分有一些"数量"属性,需要在网格之间同步。例如,如果用户更改了grid1上partABC的数量,则partABC需要以相同的数量添加到grid2中,或者如果grid2已经包含partABC,则必须更改其数量以反映grid1。

我的问题是这必须是双向的。如果我在两个网格中的每个部分上都设置了PropertyChanged处理程序,那么当它们不断更新彼此的数量时,我最终会得到一个无限循环。到目前为止,我是在标签控件选择更改事件中处理这个问题,只是迭代其中一个列表并逐个设置数量。这工作得很好,直到我意识到用户可能会向他们的列表中添加数千个零件,在这一点上,这个过程需要不可接受的时间来完成(大约25秒4500个零件对象)。

编辑
第一个网格包含数据库中的每个部件,作为一种"选择列表",用户只需滚动到他们正在寻找的部件并输入数量。第二个网格只包含由用户手动输入的部件,以防用户希望键入所需部件的编号。

您可以通过数据绑定来实现这一点。您不应该创建重复的Part对象。相反,复制保存部件的集合。

Part sharedPart = new Part();
Part onlyInTabA = new Part();
Part onlyInTabB = new Part();
ObservableCollection<Part> tabAParts = new ObservableCollection<Part>() { sharedPart, onlyinTabA };
ObservableCollection<Part> tabBParts = new ObservableCollection<Part>() { sharedPar, onlyInTabB };

现在使用tabAParts绑定到标签A上的网格,tabBParts绑定到标签B上的网格

如果你的Part类实现INotifyPropertyChanged,那么改变sharedPart的属性将更新两个选项卡上的两个网格。当您添加新部件时,您可以选择将其共享(将其添加到两个集合中)或将其保留为特定于选项卡的

最新更新