如何将一个ObservableCollection设置为另一个ObservableCollection?

时间:2013-02-25 18:54:51

标签: c# wpf list observablecollection

基本上,我想知道我是否可以使用两个ObservableCollections:

oldList = newList;

我有两个列表通过我的应用程序填充,每次填充时,我希望'new'值成为'旧'值,然后获取一组新的值放入'new 'list。

这很容易吗?有没有其他方法可以做到这一点,而不是每次迭代整个newList?

编辑:这是新列表的填充方式。基本上,我只想将newList的内容放入oldList。

                foreach (object obj in ts.GetVariables())
            {
                if ((obj.ToString() != "_SMSTSReserved2") || (obj.ToString() != "OSDJoinPassword") || (obj.ToString() != "OSDLocalAdminPassword"))
                {
                    TSVar var = new TSVar();
                    var.TSVarName = obj.ToString();
                    var.TSVarValue = ts[obj.ToString()];
                    newList.Add(var);
                }
            }
            oldList.Clear();
            foreach (TSVar var in newList)
            {
                oldList.Add(var);
            }

2 个答案:

答案 0 :(得分:2)

如果您使用下面列出的扩展方法,那么您尝试做的事情就变成了一个方法:

oldList.Replace(newList);

我会为ObservableCollection创建一个扩展方法,如下所示:

public static class ObservableCollectionExtensionMethods
    {
        public static void Replace<T>(this ObservableCollection<T> old, ObservableCollection<T> @new)
        {
            old.Clear();
            foreach (var item in @new)
            {
                old.Add(item);
            }
        }
    }

这就是你如何使用它:

using System.Collections.ObjectModel;
using System.Linq;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace ExtensionMethods
{
    [TestClass]
    public class ObservableCollectionExtensionMethodsTest
    {
        [TestMethod]
        public void ReplaceTest()
        {
            // Arrange
            var old = new ObservableCollection<string> { "1"};
            var @new = new ObservableCollection<string> {"2"};

            // Act
            old.Replace(@new);

            // Assert
            Assert.AreEqual("2", old.First());
        }
    }
}

答案 1 :(得分:0)

我认为您可能正在寻找这个?这会将newList中的所有内容添加到oldList。

ObservableCollection<YourType> oldList = new ObservableCollection<YourType>(newList);
newList.clear();
//put new stuff in your list here.