Pourquoi ce code XAML reçoit-il l'erreur: La collection d'éléments doit être vide avant d'utiliser ItemsSource
Quelqu'un peut-il évoquer à partir de ce code pourquoi l'ItemsSource ligne serait d'obtenir un
Collection d'éléments doit être vide avant
à l'aide de ItemsSource.
erreur? La plupart des solutions que j'ai trouvé de point de mal composé XAML, par exemple, un élément supplémentaire, etc. ce que je ne semble pas avoir. Quand je prends
ItemsSource="{Binding Clients}"
il s'exécute sans erreur (mais bien sûr, ne veut pas afficher ma liste de clients).
Clients est définit ainsi, dans le ViewModel et dispose de 3 CustomerViewModels:
Customer[] customers = Customer.GetCustomers();
IEnumerable<CustomerViewModel> customersViewModels = customers.Select(c => new CustomerViewModel(c));
this.Customers = new ReadOnlyCollection<CustomerViewModel>(customersViewModels.ToArray());
Toutes les suggestions de savoir où chercher?
<UserControl x:Class="TestCommandSink123.View.CustomersView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestCommandSink123"
xmlns:view="clr-namespace:TestCommandSink123.View"
xmlns:vm="clr-namespace:TestCommandSink123.ViewModel"
xmlns:sink="clr-namespace:TestCommandSink123.CommandSinkClasses"
sink:CommandSinkBinding.CommandSink="{Binding}"
>
<UserControl.CommandBindings>
<sink:CommandSinkBinding Command="vm:CustomersViewModel.CloseAllCustomersCommand"/>
</UserControl.CommandBindings>
<DockPanel>
<ItemsControl
DockPanel.Dock="Bottom" ItemsSource="{Binding Customers}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:CustomerView/>
</DataTemplate>
</ItemsControl.ItemTemplate>
<Button
Command="vm:CustomersViewModel.CloseAllCustomersCommand"
Content="Close All"
Margin="0,0,0,8"
/>
</ItemsControl>
</DockPanel>
</UserControl>
RÉPONSE:
Je n'ai en effet mal formé XAML, juste négligé, le Bouton doit être à l'extérieur de la ItemsControl:
<ItemsControl
DockPanel.Dock="Bottom" ItemsSource="{Binding Customers}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<view:CustomerView/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
<Button
Command="vm:CustomersViewModel.CloseAllCustomersCommand"
Content="Close All"
Margin="0,0,0,8"
/>
source d'informationauteur Edward Tanguay
Vous devez vous connecter pour publier un commentaire.
Vous tentez de définir la ItemsSource de la ItemsControl, mais vous avez déjà des enfants. Lequel des deux doit s'appliquer? Le Bouton que vous avez mis à l'intérieur de la ItemsControl ou de la collection en cours de remise en elle comme ItemsSource? Le message d'erreur est parfaitement raisonnable.
Vous devez soit supprimer le bouton de la ItemsControl, ou de retirer la ItemsSource attribut. Vous ne pouvez pas insérer des éléments et définir les ItemsSource en même temps.
Votre ItemsControl dispose d'un Bouton. Puisqu'il y a déjà un élément dans la ItemsControl, c'est de ne pas laisser vous définissez sa propriété ItemsSource.
Déplacez le Bouton de déclaration dans le cadre de la
</ItemsControl>
balise de fermeture.Avez-vous regardé cette question? Il semble que la réponse à votre problème.
"Les éléments de la collection doit être vide avant d'utiliser ItemsSource."