当一个项目在列表中更改时,我也希望更新其他列表中的相同项目

时间:2014-03-12 19:47:49

标签: c# list collections observablecollection

我徒手打出这个,所以请原谅我任何错别字......感觉像制作这样一个简单的课程是最简单的方式来代表我在实际项目中想要完成的事情......无论如何

如何编辑一个集合/列表(Collection_A)中的项目,以及它是否同时在不同类(Collection_B)的集合/列表中反映更改?< / p>

现在,我这样做的方法是迭代Collection_B以获得相同的名称和品种..如果是这样,将其替换为Collection_A中的内容......

我觉得这可能是一个更优雅的解决方案,我完全错过了一些简单的事情......或者我和我的解决方案可能是最好的解决方案。

我只是想&#34; up&#34;我的效率和编程技术..谢谢SO

public class Dog
{
    public string name;
    public string breed;
}

public class DogList
{
    public string listName;
    public static ObservableCollection<Dog> Collection_B;
}

public static ObservableCollection<Dog> Collection_A;


Collection_A.Add(new Dog("Coco", "Chihuahua"));
Collection_A.Add(new Dog("Bubba", "Bulldog"));

DogList.Collection_B.Add(Collection_A[0]);
DogList.Collection_B.Add(Collection_B[0]);


Collection_A[0] = new Dog("Coco Moco", "Chuhuahua")  //how can i get this to reflect in Collection_B simultaneously?

4 个答案:

答案 0 :(得分:2)

如果两个集合中的对象都是引用类型(例如,class而不是struct),并且同一实例被添加到两个集合中,则集合然后有一个引用到同一个对象实例。在任何一个地方进行的更改都会自动反映在另一个地方。

但是,如果一个集合中的对象实例替换为另一个对象实例,则另一个集合将不知道它:它仍将保留对原始对象的引用。要解决这个问题,您需要使用观察者模式

根据您的收藏品的语义和要求,您可以

答案 1 :(得分:1)

订阅CollectionChanged的{​​{1}}个活动,并针对每个可能的Collection_A更新Collection_B

以下是示例代码:

NotifyCollectionChangedAction

答案 2 :(得分:1)

您可以在两个集合中使用相同的对象(因为它是ref类型)。 所以你的代码应该是这样的:

var typeofdog = new Dog("Coco", "Chihuahua");
Collection_A.Add(typeofdog );
Collection_B.Add(typeofdog );

现在您可以将Collection_A [“您的项目”]更改为其他值,每个集合仍然会回复正确的答案: 例如:

Collection_A["YOUR ITEM"].changeContant();//will reflect on both collections

请注意,如果您将使用新单词,这将无效,因为将初始化新对象。

答案 3 :(得分:1)

您可以在案例中使用以下内容:

Collection_A[0].name = "Coco Moco";
Collection_A[0].breed = "Chuhuahua";

这些更改将反映在两个列表中。