Проблем с наблюдаваната колекция на Silverlight

Имам две наблюдателни колекции като по-долу

public ObservableCollection<Employee> AllEmployees
{
  get { return _allEmployees; }
  set { _allEmployees = value;  }
}

public ObservableCollection<Employee> EmployeesToDisplay
{
   get { return _employeesToDisplay; }
   set { _employeesToDisplay = value;  }
}

И двете са индивидуално зададени от стойността, върната от услугата wcf.

                AllEmployees = ListofEmployees ;
                EmployeesToDisplay= ListofEmployees;

При промяна на падащ списък, който ми позволява да избирам Активни служители или неактивни служители, изпълнявам следната Linq заявка на „Всички служители“

var membersEnabled = from entity in AllEmployees where entity.IsEnabled == true orderby entity.Name asscending select entity;

и след това присвоете върнатата стойност на EmployeesToDisplay, както е показано по-долу:

EmployeesToDisplay.Clear();
EmployeesToDisplay.Add(employeesEnabled as Employee);

Проблемът е: когато мина покрай този ред 'EmployeesToDisplay.Clear()' ... той дори изчиства 'AllEmployees'

Някаква идея защо се случва това? и как да го заобиколя?

Благодаря за отделеното време...


person user20358    schedule 10.11.2010    source източник


Отговори (2)


Променете своя „набор“ от „копиране по препратка“ на „копиране по стойност“.

set { _employeesToDisplay = new ObservableCollection<Employee>( value );  }
person jyoung    schedule 10.11.2010
comment
Това ли е начинът по подразбиране за всички наблюдаеми колекции? Бих си помислил, че и двете са отделни променливи в собственото си пространство на паметта. и промяната на стойността на едното не трябва да засяга другото...?? - person user20358; 10.11.2010
comment
Не, така се държат всички класове, които са референтни типове. Тук имате само една колекция, но с 3 различни имена, сочещи към нея. - person Euphoric; 10.11.2010

Може ли да предоставите малко повече код? Двете колекции са независими една от друга и въпреки че сочат към едни и същи обекти, те не зависят една от друга, така че изчистването на едната не трябва да променя другата.

Освен това не можете да добавяте множество елементи към ObservableCollection с помощта на метода Add; трябва да го правите един елемент наведнъж. И вие също се опитвате да прехвърлите IEnumerable към Employee, което ще доведе до добавяне на нулева стойност към вашата колекция

person amc    schedule 10.11.2010
comment
Благодаря, ще променя метода Add на foreach цикъл. Добавих още код.. само частта, където присвоявам стойностите на тези две „ObservableCollection‹Employee›“ - person user20358; 10.11.2010