【问题标题】:Silverlight Observable Collection problemSilverlight Observable Collection 问题
【发布时间】:2010-11-10 11:43:46
【问题描述】:

我有两个如下所示的 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;

在更改允许我选择活跃员工或非活跃员工的组合框时,我在“AllEmployees”上运行以下 Linq 查询

var employeesEnabled = 来自 AllEmployees 中的实体 其中 entity.IsEnabled == true orderby entity.Name 升序 选择实体;

然后将返回的值分配给EmployeesToDisplay,如下所示:

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

问题是: 当我越过这条线'EmployeesToDisplay.Clear()'时......它甚至清除了'AllEmployees'

知道为什么会这样吗?以及如何绕过它?

感谢您的宝贵时间...

【问题讨论】:

    标签: c# linq observablecollection


    【解决方案1】:

    将您的“集合”从“按引用复制”更改为“按值复制”。

    set { _employeesToDisplay = new ObservableCollection<Employee>( value );  }
    

    【讨论】:

    • 这是所有可观察集合的默认行为方式吗?我原以为它们都是各自内存空间中的独立变量。并且改变一个的值不应该影响另一个...??
    • 不,这就是所有类的行为方式,即引用类型。在这里,您只有一个集合,但有 3 个不同的名称指向它。
    【解决方案2】:

    您能否提供更多代码?这两个集合相互独立,虽然它们指向同一个对象,但它们并不相互依赖,因此清除一个不应该修改另一个。

    另外,您不能使用 Add 方法向 ObservableCollection 添加多个项目;你必须一次做一件。而且您还尝试将 IEnumerable 强制转换为 Employee ,这将导致将空值添加到您的集合中

    【讨论】:

    • 谢谢,将 Add 方法更改为 foreach 循环。添加了更多代码..只是我将值分配给这两个 'ObservableCollection'
    猜你喜欢
    • 2014-07-10
    • 2021-12-25
    • 2018-11-09
    • 2011-10-15
    • 1970-01-01
    • 2015-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多