2013-03-20 63 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