In meiner WPF-App möchte ich mehrere Elemente haben, die vom Benutzer zur Laufzeit generiert werden. Diese stammen aus verschiedenen Klassen und daher bestand meine ursprüngliche Idee darin, sie verschiedenen Observable Collections hinzuzufügen und sie dann als ItemsSources verschiedener ItemsControls zu verwenden. WPF gibt mir jedoch den Fehler System.InvalidOperationException: Items-Auflistung muss leer sein, bevor ItemsSource verwendet. Ich bin kein WPF-Experte, aber die Antwort auf THIS SO Frage scheint darauf hinzuweisen, dass ich nur 1 ItemsControl haben kann.WPF: Kann ich mehrere ItemsControls mit verschiedenen ItemsSources haben?
THIS SO Frage zeigt an, dass ich vielleicht die CompositeCollection-Klasse verwenden sollte, aber anders als in der zitierten Frage habe ich mehrere völlig unterschiedliche Observable Collections für ganz andere Aufgaben.
Hier ist der relevante Teil meiner XAML.CS mit zwei Kollektionen: 1 von einem Typ benutzerdefinierte Schnittstelle und 1 von benutzerdefinierten Klassentyp
public MainWindow()
{
InitializeComponent();
DefaultWindowDefinition.ItemsSource = ProcessElements = new ObservableCollection<IProcessSimulator>();
PathControl.ItemsSource = PathElements = new ObservableCollection<VisualPath>();
}
Und hier ist der relevante Teil der XAML I zu verwenden versucht, :
<Grid x:Name="MainGrid"
Background="{StaticResource Alternating}"
MouseLeftButtonUp="grid_MouseLeftButtonUp"
ShowGridLines="True">
<ItemsControl Name="DefaultWindowDefinition"
ItemsSource="{Binding ProcessElements}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--HERE IS A LONG LIST OF ELEMENTS-->
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<!--TEMPLATE FOR THE 1ST ITEMSCONTROL-->
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<!--STYLE PROPERTIES FOR THE 1ST ITEMSCONTROL-->
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
<ItemsControl Name="PathControl"
ItemsSource="{Binding PathElements}">
<DataTemplate>
<!--HERE IS A LIST OF OTHER TYPE OFELEMENTS-->
</DataTemplate>
</ItemsControl>
</Grid>
Wie sollte ich dieses Problem angehen oder eher, welches C#/WPF-Element sollte ich verwenden? Eine Referenz und einige einfache Erklärungen sind mehr als genug, ich kann den Rest selbst googlen, ich weiß einfach nicht, wonach ich wirklich suchen soll.
Eine Sache, die ich sehe, ist falsch, dass Sie 'ItemsSource' in XAML nicht binden müssen und es auch im Konstruktor setzen müssen. Es sollten nur die Elementeigenschaften ('ProcessElements' und' PathElements') ausreichen. Das könnte die Ausnahme verursachen. Wenn das nicht ist, welche Zeile löst die Ausnahme aus? – Andy
Das war nicht die Ursache der Probleme, aber das Einstellen der ItemsSource _only_ im Code Behind scheint zu funktionieren, also vielen Dank, dass Sie darauf hingewiesen haben! – rTECH