Próbuję wyświetlić obrazy w widoku listy WPF w stylu WrapPanel, jak opisano w tym starym artykule zespołu ATC Avalon: Jak utworzyć widok niestandardowy .
Kiedy próbuję wypełnić ListView za pomocą zapytania LINQ-to-Entities kolekcji obiektów ADO.NET Entity Framework, otrzymuję następujący wyjątek:
Wyjątek
Kolekcja elementów musi być pusta przed użyciem ItemsSource.
Mój kod…
Visual Basic
Private Sub Window1_Loaded(...) Handles MyBase.Loaded
ListViewImages.ItemsSource = From g In db.Graphic _
Order By g.DateAdded Ascending _
Select g
End Sub
XAML
<ListView Name="ListViewImages"
SelectionMode="Single"
ItemsSource="{Binding}">
<local:ImageView />
</ListView>
Ustawiłem punkt przerwania na tej linii. ListViewImages.ItemsSource
jest Nothing
tuż przed przypisaniem LINQ.
Przez jakiś czas miałem ten sam błąd w nieco innym scenariuszu. miałem
który ustaliłem
źródło
Właśnie natknąłem się na BARDZO podstępny przykład tego problemu. Mój oryginalny fragment był znacznie bardziej złożony, przez co trudno było dostrzec błąd.
Błąd? Dodatkowy > po pierwszym
<ItemsControl>
tagu otwierającym !<
Got zastosowane do wbudowanej w punktach zbiórki. Gdy DataContext został później ustawiony, natychmiastowy błąd crashola. Dlatego podczas debugowania tego problemu należy zwracać uwagę na więcej niż tylko błędy otaczające określone elementy potomne danych ItemsControl.źródło
>
=> ExceptionJa też w innym scenariuszu.
Teraz, gdy uzupełnisz brakujący tag Control.ItemTemplate , wszystko wróci do normy:
źródło
<ItemsControl>
.Miałem ten sam błąd w innym scenariuszu
Rozwiązaniem było dodanie
ItemsControl.ItemsPanel
tagu przedItemsPanelTemplate
źródło
⚠️ Aby odpowiedzieć inaczej ⚠️
💡 W Xaml sprawdź, czy w zdefiniowanych obszarach nie ma brakujących węzłów nadrzędnych ani nieprawidłowych węzłów .
Na przykład
To się nie udaje:
Poniżej nie ma odpowiedniego rodzica dla
ItemsPanelTemplate
węzła podrzędnego:To działa:
💡 Podany jest właściwy węzeł nadrzędny
<ItemsControl.ItemsPanel>
^^^. 💡źródło
<DataGrid.Columns>
i zawierało kolumny szablonów bezpośrednio w środku<DataGrid>
. Dziwny błąd.Ten wyjątek występuje, gdy dodajesz elementy do
ItemsSource
różnych źródeł . Dlatego upewnij się, że przypadkowo nie przegapiłeś tagu, nie zgubiłeś tagu, nie dodałeś dodatkowych tagów lub nie zapisałeś tagu.Gdy
ItemsControl.ItemsSource
jest już ustawionyBinding
, inne elementy (Siatka, Przycisk, ...) nie mogą być dodawane do źródła. Jednak gdy nieItemsSource
jest używany, dozwolony jest następujący kod :zwróć uwagę na brakującą
ItemsSource="{Binding MyItems}"
część.źródło
Zachowaj kolumnę szablonu wewnątrz DataGrid.Columns. To pomogło mi rozwiązać ten problem.
Ref: DataGridTemplateColumn: kolekcja Items musi być pusta przed użyciem ItemsSource.
źródło
W moim przypadku był to tylko dodatkowy StackPanel wewnątrz ListView:
Staje się:
i wszystko w porządku.
źródło
W moim przypadku nie używał DataTemplate dla ItemsControl.
Stary:
Nowy:
źródło
Mój był w stylu datagrid. Jeśli pominiesz
<DataGrid.RowStyle>
tagi wokół stylu, pojawi się ten problem. Dziwne jest to, że tak to działało przez jakiś czas. Oto zły kod.i dobre
źródło
Miałem ten sam błąd. Problem polegał na tym, że ten dodatkowy symbol „>” został dodany przez pomyłkę między tagami </ComboBox.SelectedValue> i </ComboBox>:
a oto poprawny kod:
źródło
Wystąpił ten błąd, gdy próbowałem zastosować menu kontekstowe do pliku
TreeView
. Te próby zakończyły się złym kodem XAML, który jakoś się skompilował:Zwróć uwagę na problematyczną linię:
ContextMenu="">
.Nie wiem, dlaczego został skompilowany, ale doszedłem do wniosku, że warto o tym wspomnieć jako powód tej tajemniczej wiadomości o wyjątku. Jak powiedział Armentage, rozejrzyj się uważnie po XAML, szczególnie w miejscach, które niedawno edytowałeś.
źródło
Napotkałem ten błąd w innej sytuacji. Próbowałem zdefiniować styl dla TreeViewItems bezpośrednio w ramach
<TreeView>
, ale zamiast tego powinienem był osadzić go w<TreeView.ItemContainerStyle>
.Źle:
Poprawny:
źródło
Może nie taka użyteczna odpowiedź, ale miałem ten sam problem przy zmianie kolejności kolumn i popełniłem błąd jak w poniższym przykładzie. Mając dużo kolumn, zmieniłem ich kolejność i jakoś wkleiłem jedną po zamknięciu tagu
/DataGrid.Columns
:Zresztą straciłem przez to pół godziny. Mam nadzieję, że to pomoże innym.
źródło
<ListView.View>
Napotkałem ten problem, ponieważ w moim XAML brakowało jednego poziomu tagu .Ten kod spowodował ten błąd.
Następujące rzeczy to naprawiły
źródło
Uważaj na literówki! Miałem następujące
(Zwróć uwagę na tailing > , który jest interpretowany jako zawartość, więc ustawiasz podwójną zawartość ... Zajęło mi to chwilę :)
źródło