Проблема наблюдаемой коллекции Silverlight

У меня есть две коллекции observalbe, как показано ниже

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 для «AllEmployees».

var employeeEnabled = from entity in AllEmployees, где entity.IsEnabled == true orderby entity.Name по возрастанию выберите объект;

а затем присвойте возвращенное значение 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
Нет, так ведут себя все классы, которые являются ссылочными типами. Здесь у вас есть только одна коллекция, но с тремя разными именами, указывающими на нее. - person Euphoric; 10.11.2010

Не могли бы вы предоставить немного больше кода? Две коллекции независимы друг от друга и, хотя они указывают на одни и те же объекты, они не зависят друг от друга, поэтому очистка одной не должна изменять другую.

Кроме того, вы не можете добавить несколько элементов в ObservableCollection с помощью метода Add; вы должны делать это по одному пункту за раз. И вы также пытаетесь передать IEnumerable сотруднику, что приведет к добавлению нулевого значения в вашу коллекцию.

person amc    schedule 10.11.2010
comment
Спасибо, изменим метод Add на цикл foreach. Добавил больше кода.. только тот бит, где я присваиваю значения этим двум 'ObservableCollection‹Employee›' - person user20358; 10.11.2010