我有一个项目列表,并已将其复制到一个集合。如果列表发生任何更改,它应自动反映在集合中

时间:2013-01-16 11:04:57

标签: c# .net visual-studio-2008

我的项目

  

步骤1:创建一个C#控制台应用程序,该应用程序应创建一个String类型列表并添加item1,item 2和item 3.

     

步骤2:创建String类型的集合并复制这些项目。

     

步骤3:如果List对象发生任何变化,它应该反映在Collection对象中。

我成功完成了第2步,我的代码是

class Program
    {
        static void Main(string[] args)
        {
            List<string> newList = new List<string>();
            newList.Add("Item 1");
            newList.Add("Item 2");
            newList.Add("Item 3");

            Collection<string> newColl = new Collection<string>();

            foreach (string item in newList)
            {
                newColl.Add(item);
            }

            Console.WriteLine("The items in the collection are");
            foreach (string item in newColl)
            {
                Console.WriteLine(item);
            }

            Console.ReadKey();
        }
    }

现在,如果列表中发生了更改,它将如何反映在集合对象中?

1 个答案:

答案 0 :(得分:3)

尝试使用ObservableCollection代替List<string>并订阅活动CollectionChanged。这是非常天真的实现只是为了给出一般的想法。您应该添加参数检查或执行其他类型的同步,因为您没有说明应在Collection

上如何反映更改的确切内容
ObservableCollection<string> newList = new ObservableCollection<string>();
newList.Add("Item 1");
newList.Add("Item 2");
newList.Add("Item 3");

Collection<string> newColl = new Collection<string>();


newList.CollectionChanged += (sender, args) => 
        {
            foreach (var newItem in args.NewItems)
            {
                newColl.Add(newItem);
            }
            foreach (var removedItem in args.OldItems)
            {
                newColl.Remove(removedItem);
            }
        };