Estou tentando fazer com que as imagens sejam exibidas em um WPF ListView com o estilo de WrapPanel, conforme descrito neste antigo artigo da equipe do ATC Avalon: Como criar uma exibição personalizada .
Quando tento preencher o ListView com uma coleção de LINQ to Entities consultada de objetos do ADO.NET Entity Framework, recebo a seguinte exceção:
Exceção
A coleção de itens deve estar vazia antes de usar o ItemsSource.
Meu código
Visual básico
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>
Eu coloquei um ponto de interrupção nessa linha. ListViewImages.ItemsSource
é um Nothing
pouco antes da atribuição LINQ.
Eu tive esse mesmo erro por um tempo em um cenário um pouco diferente. eu tinha
que eu consertei para ser
fonte
Acabei de encontrar um exemplo MUITO insidioso deste problema. Meu fragmento original era muito mais complexo, o que dificultava a visualização do erro.
O inseto? O extra > após a
<ItemsControl>
tag de abertura inicial ! Foi<
aplicado à coleção de itens interna. Quando o DataContext foi definido posteriormente, falha instantânea. Portanto, procure mais do que apenas erros ao redor dos filhos de dados específicos do ItemsControl ao depurar esse problema.fonte
>
=> ExceptionEu também em um cenário diferente.
Agora, quando você concluir com a tag Control.ItemTemplate ausente , tudo voltará ao normal:
fonte
<ItemsControl>
.Eu tive esse mesmo erro em um cenário diferente
A solução foi adicionar a
ItemsControl.ItemsPanel
tag antes doItemsPanelTemplate
fonte
⚠️ Para indicar a resposta de forma diferente ⚠️
X No Xaml, verifique se não há nós pais ausentes ou nós incorretos nas áreas definidas.
Por exemplo
Isso está falhando:
Não há pai apropriado para o nó filho abaixo:
ItemsPanelTemplate
Isso está funcionando:
💡 Existe um nó pai adequado do
<ItemsControl.ItemsPanel>
^^^ fornecido. 💡fonte
<DataGrid.Columns>
e tinha colunas de modelo diretamente dentro<DataGrid>
. Erro estranho para isso.Essa exceção ocorre quando você adiciona itens às
ItemsSource
fontes diferentes . Portanto, verifique se você não perdeu uma tag acidentalmente , perdeu uma tag, adicionou tags extras ou escreveu errado uma tag.Enquanto
ItemsControl.ItemsSource
já estiver definidoBinding
, outros itens (Grade, Botão, ...) não podem ser adicionados à fonte. No entanto, enquanto nãoItemsSource
estiver em uso, o seguinte código é permitido :observe a
ItemsSource="{Binding MyItems}"
parte que falta .fonte
Mantenha a coluna do modelo dentro de DataGrid.Columns. Isso me ajudou a resolver esse problema.
Ref: DataGridTemplateColumn: a coleção de itens deve estar vazia antes de usar ItemsSource.
fonte
No meu caso, era apenas um StackPanel extra dentro do ListView:
Torna-se:
e está tudo bem.
fonte
No meu caso, ele não estava usando um DataTemplate para o ItemsControl.
Velho:
Novo:
fonte
O meu estava com um estilo datagrid. Se você deixar de fora as
<DataGrid.RowStyle>
tags em torno do estilo, terá esse problema. O estranho é que funcionou por um tempo assim. Aqui está o código incorreto.e o bom
fonte
Eu tive o mesmo erro. O problema foi esse símbolo extra ">" adicionado por engano entre as tags </ComboBox.SelectedValue> e </ComboBox>:
e aqui está o código correto:
fonte
Eu tive esse erro quando tentei aplicar menus de contexto ao meu
TreeView
. Essas tentativas acabaram em um XAML ruim, que foi compilado de alguma forma:Observe a linha problemática:
ContextMenu="">
.Não sei por que ele foi compilado, mas achei que vale a pena mencionar como uma razão para essa mensagem de exceção enigmática. Como Armentage disse, olhe ao redor do XAML com cuidado, especialmente nos lugares que você editou recentemente.
fonte
Encontrei esse erro em outra situação. Tentei definir um estilo para TreeViewItems diretamente dentro do
<TreeView>
, mas em vez disso deveria incorporá-lo<TreeView.ItemContainerStyle>
.Errado:
Corrigir:
fonte
Talvez não seja uma resposta tão útil, mas tive o mesmo problema ao alterar a ordem das colunas e cometi erros como o da amostra a seguir. Tendo muitas colunas, reordenei-as e colei de alguma maneira uma após fechar a tag
/DataGrid.Columns
:Enfim, perdeu meia hora por causa disso. Espero que isso ajude os outros.
fonte
Corri para esse problema porque um nível de tag,
<ListView.View>
para ser específico, estava ausente no meu XAML.Este código produziu esse erro.
O seguinte corrigiu
fonte
Cuidado com erros de digitação! Eu tive o seguinte
(Observe o tailing > , que é interpretado como conteúdo, então você está definindo o dobro do conteúdo ... Demorou um pouco :)
fonte