Редактировать:
Простой ответ: Да. Я обнаружил ошибку, которая заключалась в том, что был добавлен другой обработчик событий, каждый раз, когда был запущен Combobox_SelectionChanged
. Следовательно, коллекция выглядела отлично, но Items_CollectionChanged
был запущен несколько раз. Как только это было исправлено, все сработало нормально.
End Edit.Does Grid.Children.Clear() действительно удалить все элементы управления?
У меня есть страница со списком и сеткой. Сетка заполняется динамически, когда выбор в поле со списком изменяется. Теперь я наблюдаю странную вещь. Когда я выбираю значение во второй раз в поле со списком, дочерние элементы в сетке появляются дважды. Я проверил базовые коллекции, которые выглядят отлично (т. Е. Только одна запись за элемент). Когда я выпрыгиваю из метода combobox_SelectionChanged, после команды Grid.Children.Clear()
экран выглядит отлично, т. Е. Пустым.
Моя догадка заключается в том, что Grid.Children.Clear()
удаляет элементы управления только из визуального дерева, но фактические элементы управления все еще висят вокруг. Есть идеи?
private void combobox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
grItems.Children.Clear();
grItemsColumnDefinitions.Clear();
grItemsColumnDefinitions.Add(new ColumnDefinition() { Width = new GridLength(200) });
}
private void Items_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
if (e.Action == NotifyCollectionChangedAction.Add)
{
grItems.Children.Add(new ChildItemControl(e.NewItems[0]));
}
}
Edit: Все это должно выглядеть так (вымышленный - но, надеюсь, понятно - например)
Просто интересно, есть причина, вы не можете использовать привязки для этого вместо того, чтобы добавлять вещи в сетку вручную? – Charleh
Ну, одна из причин - отсутствие навыков xaml;) Но другая заключается в том, что сама структура довольно сложна, а также способ ее отображения. Там было еще несколько вертикальных и горизонтальных слоев (дни, покупатели, отделы, aso). Поэтому мне стало легче обрабатывать, если элементы управления добавлены в код. –
Вы не должны думать, что «структура» данных слишком сложна для привязки данных. Чем сложнее данные, тем больше вы должны полагаться на привязку данных, поскольку вы обязаны делать больше ошибок в своей логике бэкэнд, чем вы должны делать в своих шаблонах привязки. Взгляните на образец MVVM в разделе «Документация» SO: http://stackoverflow.com/documentation/wpf/2134/simple-mvvm-example#t=201607261427091123224 –