Non si può fare una delle soluzioni elencato qui fino a quando i tuoi tipi sono gli stessi! Se il tuo elenco o ICollection o IEnumerable è di tipo , ad esempio, ma il tuo ObservableCollection
deve essere di tipo Nodes
o Computers
o altro, devi prima ottenere l'Elenco in quel tipo! Ho sprecato così tanto tempo su queste altre false "soluzioni" semplificate che NON sono soluzioni perché non spiegano questo o tengono conto di questo fattore.
dire che questo è il tuo ObservableCollection
:
public class Computer
{
public string Name { get; set; }
}
piuttosto standard, giusto? Probabilmente finirai per sostituire Computer
con qualsiasi numero di cose in un numero qualsiasi di progetti.
Se poi si ottiene un elenco di nomi di computer in un List<string>
chiamato lstComputers
, non si può semplicemente convertire che l'utilizzo di:
var oc = new ObservableCollection<Computer>(lstComputers);
Si dirà i tipi di non corrispondono e non possono essere convertiti da uno all'altro perché stai cercando di spingere un List<string>
in un ObservableCollection<Computer>
. Piolo quadrato in un buco rotondo.
Invece, nella funzione per ottenere i nomi dei computer, è necessario aggiungere tutti "speciali-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 });
}
}
}
}
Solo perché abbiamo usato quella linea lstComputers.Add(new Computer() { Name = computer.Name });
e stanno tornando alla List<Computer>
e non List<string>
può ora lo inseriamo nel nostro ObservableCollection<Computer>
.
Se vi siete persi la barca e non si può fare in questo modo fin dall'inizio, questa discussione parla di altri modi si potrebbe essere in grado di fare la vostra conversione: convert a list of objects from one type to another using lambda expression
Quindi, una volta che lo avete in un List<Computer>
, solo allora puoi fare:
List<Computer> lstComputers = NetworkComputers();
var oc = new ObservableCollection<Computer>(lstComputers);
Perché non basta renderli 'ObservableCollection
@Rachel corretto. Il primo posto sono i servizi di RIA. Non so se è possibile farlo ... – Terminador