Hallo, kann ich einen ItemSource mehr als eine Quelle zu ordnen? Um genauer zu sein, zwei ObservableCollection?
Gruß dat Tala
Hallo,
du meinst ein Objekt d. z.b so aussieht
public ZweiListen
{
public IEnumerable listeeins {get;set;}
public IEnumerable listezwei {get;set;}
}
Falls ja.
Klar kannst du eine eigene ItemsSource erstellen die so aussieht. Wenn du aber so ein Objekt einer ListBox / ListView übergeben willst geht das nicht.
Den die Propertie ItemsSource vom ItemsControl (ListBox und ListView sind von diesem abgeleitet) haben als Typ IEnumerable implementiert. D.h. du kannst nur Listen, Array bzw. alle die dieses Interface implementieren übergeben.
Erstell doch einfach 2 seperate ListBoxen die nebeneinander sind.?
Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp
Genau das will ich.
Ich habe in der einen Collection die Pfade enthalten. In der anderen dann die Elemente.
Gruß dat Tala
Am einfachsten wäre es natürlich wenn du aus den zwei ObservableCollections eine machst.
Vereinfach dargestellt:
Also aus dem hier:
public class PfadObjekt
{
public string Pfad { get; set; }
}
public class EinanderesObjekt
{
public object EinAnderesObjekt { get; set; }
}
public ObservableCollection<PfadObjekt> PfadList { get; set; }
public ObservableCollection<PfadObjekt> EinanderesObjekt { get; set; }
eine neue passende Klasse erstellst, die die zwei benötigten Properties beinhaltet. Dazu schreibst du noch eine Funktion die aus den 2Listen eine neue macht.
public class EinandresOjektMitPfad
{
public string Pfad { get; set; }
public object EinAnderesObjekt { get; set; }
public static EinandresOjektMitPfad Convert(ObservableCollection<PfadObjekt> pPfadObjektList, ObservableCollection<EinanderesObjekt> pEinanderesObjekt)
{
EinandresOjektMitPfad einandresOjektMitPfad = new EinandresOjektMitPfad();
//todo aus den zwei listen eine EinandresOjektMitPfadList machen
return einandresOjektMitPfad;
}
}
So etwas in der Art.
Dann kannst du ganz einfach die neu erstellte liste der ListBox oder ListView übergeben.
Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp
Dumme Frage, gibt es eine ableitung von ObservableCollection die mit zwei Datentypen zu recht kommt?
Gruß dat Tala
Hallo,
es gibt nur
ObservableCollection<T>
ObservableCollection<T,T>
gibt es nicht.
Dafür must du dir entweder eine eigene Klasse schreiben oder wie gesagt ein Objekt mit den 2 Properties erstellen.
Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp
Ich glaube das was du gepostet hast, ist nicht das was ich suche. Ich möchte nicht Pfad und Item irgendwie zusammen frickeln, es sollen unabhängige Objekte sein.
Wenn im TreeView der Header ein Item enthält was in eigenschaft Path beispielsweise root\element12 stehen hat, sollen aus der Collection 2 alle Items angezeigt werden, die ebenfalls diesen eigenschaftswert hat. und zwar als eigenständige TreeViewItems.
edit: ich blicke auch grad nicht deinen Beispielcode.
Gruß dat Tala
Hallo Taladan,
mit deiner Problemstellung habe ich mich auch befasst. Siehe dazu Trennung zwischen UI und Code mit verschiedenen Datenquellen. An deiner Stelle würde ich folgendermaßen vorgehen: Eine List, wo sich eine ObservableCollection befindet anlegen, wo man alle Klassen hinzufügt, die von ObservableCollection erben oder einen Property davon besitzen zur Liste hinzufügen. Das ganze könnte man nun als Property oder direkt "in" die Klasse einbinden. Anschließend im XAML-Code daran binden. Lange Rede, kurzer Sinn - hier ein Beispiel:
public class Person
{
public string Firstname { get; set; }
public int Age { get; set; }
}
public class PersonsA : ObservableCollection<Person>
{
public PersonsA()
{
this.Add(new Person { Firstname = "zero_x", Age = 0 });
}
}
class PersonsB : ObservableCollection<Person>
{
public PersonsB()
{
this.Add(new Person { Firstname = "Taladan", Age = 355 });
}
}
public class PersonsAll
{
public ObservableCollection<Person> Get
{
get
{
// Code vereinfacht - lässt sich natürlich einfacher umsetzen.
List<ObservableCollection<Person>> list = new List<ObservableCollection<Person>>();
list.Add(new PersonsA());
list.Add(new PersonsB());
ObservableCollection<Person> p = new ObservableCollection<Person>();
foreach (ObservableCollection<Person> item in list)
{
foreach (Person p2 in item)
{
p.Add(p2);
}
}
return p;
}
}
}
<ListBox ItemsSource="{Binding Source={StaticResource p}, Path=Get}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Firstname}"/>
<TextBlock Text="{Binding Age}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
zero_x
zero_x | <span style="font-size: 10;">my</span><span style="font-size: 10;">CSharp</span><span style="font-size: 10;">.de</span> - gemeinsam mehr erreichen
Für längere Zeit inaktiv.