【发布时间】:2011-09-21 15:10:59
【问题描述】:
我有一个 WPF 应用程序,其屏幕包含一个带有两个选项卡的选项卡控件。每个选项卡上都有一个数据网格,每个都绑定到 Part 对象的 ObservableCollection。该零件有一些“数量”属性,需要在网格之间进行同步。例如,如果用户更改了grid1上partABC的数量,partABC要么需要以相同的数量添加到grid2中,要么如果grid2已经包含partABC,则必须更改其数量以反映grid1。
我的问题是这必须双向工作。如果我在两个网格中的每个部分都设置一个 PropertyChanged 处理程序,我最终会出现一个无限循环,因为它们会不断更新彼此的数量。到目前为止,我在选项卡控件选择更改事件期间处理此问题,只是遍历其中一个列表并一一设置数量。这工作得很好,直到我意识到用户可能会在他们的列表中添加数千个部件,而此时此过程需要花费不可接受的时间才能完成(4500 个部件对象大约需要 25 秒)。
编辑
第一个网格包含数据库中的每个部分,作为一种“选择列表”,用户只需滚动到他们正在寻找的部分并输入数量即可。第二个网格仅包含用户手动输入的零件,以防他们更喜欢输入所需零件的编号。 Grid2 始终是 grid1 的子集。
【问题讨论】:
-
如果您将新值与现有值进行比较,并且如果它们相等则不引发属性更改事件,则不会出现无限循环。例如,
set { if(value != _myproperty){_myproperty=value; RaisePropertyChanged(()=>MyProperty);}}
标签: c# wpf properties synchronization observablecollection