我有一个WPF应用程序,其屏幕包含带有两个选项卡的选项卡控件。在每个选项卡上都有一个数据网格,每个数据网格都绑定到Part对象的ObservableCollection。该零件具有一些“数量”属性,需要在网格之间同步。例如,如果用户更改grid1上partABC的数量,则需要将partABC添加到grid2,且数量相同,或者如果grid2已包含partABC,则必须更改其数量以反映grid1。
我的问题是这必须在两个方向都有效。如果我在两个网格中的每个部分都设置了一个PropertyChanged处理程序,那么我最终会得到一个无限循环,因为它们会不断更新彼此的数量。到目前为止,我在选项卡控件选择更改事件期间处理此问题,只是迭代其中一个列表并逐个设置数量。这很有效,直到我意识到用户可能会在其列表中添加数千个零件,此时此过程需要花费不可接受的时间(4500个零件对象大约需要25秒)。
修改的
第一个网格包含数据库中的每个部分,作为一个“选择列表”,用户只需滚动到他们要查找的部分并输入数量。第二个网格仅包含用户手动输入的部分,如果他们更喜欢键入他们想要的部分的数量。 Grid2始终是grid1的子集。
答案 0 :(得分:1)
您可以通过数据绑定完成此操作。您不应该创建重复的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
的属性将更新两个标签上的两个网格。添加新零件时,您可以选择将其共享(将其添加到两个集合中)或使其保持特定于标签