Как установить одну ObservableCollection в другую ObservableCollection?
По сути, я хочу знать, смогу ли я сделать это с помощью двух ObservableCollections:
oldList = 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 ответа
Если вы используете метод расширения, перечисленный ниже, то, что вы пытаетесь сделать, становится однострочным:
**oldList.Replace(newList);**
Я бы создал метод расширения для ObservableCollection следующим образом:
public static class ObservableCollectionEntensionMethods
{
public static void Relace<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 ObservableCollectionEntensionMethodsTest
{
[TestMethod]
public void ReplaceTest()
{
// Arrange
var old = new ObservableCollection<string> { "1"};
var @new = new ObservableCollection<string> {"2"};
// Act
old.Relace(@new);
// Assert
Assert.AreEqual("2", old.First());
}
}
}
Я думаю, это то, что вы можете искать? Это добавит все, что было в newList к вашему oldList.
ObservableCollection<YourType> oldList = new ObservableCollection<YourType>(newList);
newList.clear();
//put new stuff in your list here.