2013-03-20 69 views
1

我已经搜索了所有的论坛,但我找不到我的问题的答案。也许我只是使用了错误的关键字。 假设我有一类Foo:BindingList&InotifyPropertyChanged

class Foo 
{ 
    string a; 
    string b; 
} 

一些富的实例现在保存在一个

BindingList<Foo> bf; 

然后我有实现类型的对象之间的某种关系的第二类富:

class Bar 
{ 
    Foo f1; 
    Relation r; 
    Foo f2; 
} 

再次,一些Bar类的实例被保存在一个

BindingList<Bar> bb; 

在我程序中的某个位置,我现在删除了Foo的一个实例,比如说f7。

bb.Remove(f7); 

是否有任何可能性,确切地说那些酒吧的实例被删除,持有对f7的引用? 此刻,我钩住bf的ListChanged事件并手动遍历bb并杀死那些包含f7的Bar实例。有更聪明的方法吗?

感谢您的帮助, 圭多

+0

您的意思是'bf.Remove(f7)'? bb包含酒吧,而不是Foos ... – 2013-03-20 14:34:30

+0

@ThomasLevesque我认为OP的意思是,他想从列表中删除,如果其中一个'Foo'属性等于'F7'。所以它确实意味着'bb.Remove(f7)'在这种情况下:) – LukeHennerley 2013-03-20 14:36:23

+0

ops,确切地说,我的意思是bf.Remove(f7) – Jan 2013-03-20 14:45:18

回答

1

您的OP来看。我怀疑你想要这样的东西。您必须确保Bar中的Foo对象与Foo中的实例相同,或者执行IEquatable

var barWhereFoosExist = bb.Where(x => x.f1.Equals(f7) || x.f2.Equals(f7)); 
foreach(Bar b in barWhereFoosExist) 
{ 
    bb.Remove(b); 
} 

尝试使用类似这样的事情。

BindingList<Bar> bb = new BindingList<Bar>(); 
Foo f7 = new Foo(); 
Bar b = New Bar(); 
b.f1 = f7; 
b.f2 = new Foo(); 
+0

好的,那正是我在做的... – Jan 2013-03-20 14:46:17

+0

@Jan你是说你已经在做这个了吗?这正是你要做的? – LukeHennerley 2013-03-20 15:05:55