nie można zrobić żadnej z tych rozwiązań wymienione tutaj, dopóki twoje typy nie będą takie same! Jeśli twoja lista lub ICollection lub IEnumerable jest na przykład typu string
, ale Twój ObservableCollection
musi być typu Nodes
lub Computers
lub czymś innym, musisz najpierw uzyskać List do tego typu! Zmarnowałem tak wiele czasu na te inne fałszywe, uproszczone "rozwiązania", które NIE są rozwiązaniami, ponieważ nie wyjaśniają tego lub biorą pod uwagę ten czynnik.
powiedzieć, że to Twój ObservableCollection
:
public class Computer
{
public string Name { get; set; }
}
dość standardowy, prawda? Prawdopodobnie zastąpiłbyś Computer
dowolną liczbą rzeczy w dowolnej liczbie projektów.
Jeśli następnie uzyskać listę nazw komputerów w sposób List<string>
nazywa lstComputers
, nie można po prostu przekonwertować za pomocą:
var oc = new ObservableCollection<Computer>(lstComputers);
powie Twoje typy są niedopasowane i nie mogą być przekształcane z jednego do drugiego, ponieważ próbujesz wsunąć List<string>
do ObservableCollection<Computer>
. Kwadratowy kołek w okrągłym otworze.
Zamiast tego, w swojej funkcji dla uzyskania nazw komputerów, trzeba dodać je wszystkie „special-like”:
public static List<Computer> NetworkComputers()
{
List<Computer> lstComputers = new List<Computer>();
DirectoryEntry root = new DirectoryEntry("WinNT:");
foreach (DirectoryEntry computers in root.Children)
{
foreach (DirectoryEntry computer in computers.Children)
{
if (computer.Name != "Schema" && computer.SchemaClassName == "Computer")
{
lstComputers.Add(new Computer() { Name = computer.Name });
}
}
}
}
Tylko dlatego użyliśmy tej linii lstComputers.Add(new Computer() { Name = computer.Name });
i wracają do List<Computer>
i nie List<string>
puszka teraz umieściliśmy to w naszym ObservableCollection<Computer>
.
Jeśli przegapiłeś łódź i nie może zrobić to w ten sposób od samego początku, ten wątek opowiada o innych sposobów, może być w stanie wykonać konwersję: convert a list of objects from one type to another using lambda expression
Więc skoro masz go w List<Computer>
, tylko wtedy można zrobić:
List<Computer> lstComputers = NetworkComputers();
var oc = new ObservableCollection<Computer>(lstComputers);
Dlaczego nie po prostu uczynić je '' ObservableCollection
@Rachel Correct. Pierwsze miejsce to usługi RIA. Nie wiem, czy da się to zrobić ... – Terminador