2013-03-20 2 views
1

Я искал весь форум, но не смог найти ответ на мой вопрос. Возможно, я просто использовал неправильные ключевые слова. Давайте предположим, что у меня есть класс Foo:BindingList & InotifyPropertyChanged

class Foo 
{ 
    string a; 
    string b; 
} 

ряд экземпляров Foo теперь сохраняются в

BindingList<Foo> bf; 

Тогда у меня есть второй класс, который реализует какой-то связи между объектами типа Foo:

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

Опять же, количество экземпляров класса Bar сохраняются в

BindingList<Bar> bb; 

В какой-то момент в моей программе я удаляю экземпляр Foo, скажем, f7.

bb.Remove(f7); 

Есть ли вероятность, что именно те экземпляры Bar удалены, что содержат ссылку на f7? На данный момент я перехватываю событие ListChanged bf и вручную перемещаю bb и убиваю те экземпляры Bar, которые содержат f7. Есть ли более разумный способ?

Спасибо за вашу помощь, Guido

+0

Вы имели в виду 'bf.Remove (f7)'? bb содержит Bars, а не Foos ... –

+0

@ThomasLevesque Я думаю, что OP означает, что он хочет удалить из списка, если один из свойств Foo равен «F7». Так что это означает 'bb.Remove (f7)' в этом случае :) – LukeHennerley

+0

ops, точно, я имею в виду bf.Remove (f7) – Jan

ответ

1

Судя по вашему ОП. Я подозреваю, что вы хотите что-то подобное. Вам нужно будет убедиться, что ваши объекты Foo в Bar - это один и тот же экземпляр, или реализовать IEquatable на Foo.

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

+0

@Jan Ты имеешь в виду, что уже делаешь это? Это именно то, что вы собираетесь делать? – LukeHennerley

Смежные вопросы