Как установить одну 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.
Другие вопросы по тегам