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

本文关键字:设置 ObservableCollection 另一个 ObervableCollection 一个 | 更新日期: 2023-09-27 18:00:56

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

oldList = newList;

我有两个列表通过我的应用程序填充,每次填充时,我都希望"新"值变成"旧"值,然后获得一组新值放在"新"列表中。

有那么容易吗?有没有其他方法可以做到这一点,而不必每次都迭代整个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);
            }

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

如果您使用下面列出的扩展方法,您要做的将变成一行代码:

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());
        }
    }
}

我想这就是您想要的?这将把newList中的所有内容添加到旧列表中。

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