如何将一个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);
}
如果您使用下面列出的扩展方法,您要做的将变成一行代码:
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.