В моем приложении WPF я хочу иметь несколько элементов, которые генерируются пользователем во время выполнения. Это из разных классов, и поэтому моя первоначальная идея заключалась в том, чтобы добавить их в разные Observable Collections, а затем использовать их как ItemsSources od different ItemsControls. Однако WPF дает мне ошибку System.InvalidOperationException: коллекция элементов должна быть пустой перед использованием ItemsSource. Я не эксперт WPF, но ответ на вопрос THIS Вопрос, похоже, указывает, что я могу иметь только 1 ItemsControl.WPF: Могу ли я иметь несколько ItemsControls с различными ItemsSources?
THIS Вопрос SO указывает, что, возможно, я должен использовать класс CompositeCollection, но, в отличие от цитируемого вопроса, у меня есть несколько совершенно разных Observable Collections для совершенно разных задач.
Вот соответствующая часть моего XAML.CS с два Collections: 1 типа пользовательского интерфейса и 1 типа пользовательского класса
public MainWindow()
{
InitializeComponent();
DefaultWindowDefinition.ItemsSource = ProcessElements = new ObservableCollection<IProcessSimulator>();
PathControl.ItemsSource = PathElements = new ObservableCollection<VisualPath>();
}
А вот соответствующая часть XAML я пытался использовать :
<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>
Как я должен подходить к этой проблеме или, вернее, использовать элемент C#/WPF? Ссылка и некоторые слова простого объяснения более чем достаточно, я могу сам остальное, я просто не знаю, что искать на самом деле.
Одна вещь, я вижу, что это неправильно, так это то, что вам не нужно связывать 'ItemsSource' в XAML, а также устанавливать его в конструкторе. Необходимо установить только свойства элемента ('ProcessElements' и' PathElements'). Это может вызвать исключение. Если это не так, какая строка выбрасывает исключение? – Andy
Это не было источником проблем, но установка ItemsSource _only_ в Code Behind, похоже, сработала, поэтому спасибо, что указали это! – rTECH