Étapes de réexpédition:Pourquoi ma liste déroulante se fige-t-elle lorsque la source d'articles change? Lorsque l'application démarre, ouvrez la liste déroulante afin que les éléments soient générés.
Maintenant, cliquez sur le "Click Me!" bouton. Dans le code derrière, la source d'éléments de la liste déroulante est modifiée. Maintenant, essayez d'ouvrir à nouveau la liste déroulante. La liste déroulante se fige pendant au moins 5 secondes même si seulement 2 éléments sont dans la collection liée. Ceci est juste une application de test. Dans ma vraie application, il y a plus de 2 items et le décalage est insupportable. J'ai essayé ceci avec la virtualisation on et off. Ça ne fait aucune différence.
Qu'est-ce qui prend tellement de temps? Comment puis-je réparer ça? S'il n'y a pas de solution directe, y a-t-il un travail?
XAML:
<StackPanel>
<ComboBox x:Name="cbo" DisplayMemberPath="Junk1"></ComboBox>
<Button Content="Click Me!" Click="btn_Click"></Button>
</StackPanel>
CODE:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
}
ObservableCollection<Junk> junk1 = new ObservableCollection<Junk>() {
new Junk() { Junk1 = "jdkf", Junk2 = "fjdfkasjd;klfj" },
new Junk() { Junk1 = "jfdk;a", Junk2 = "fjkdljf" } };
ObservableCollection<Junk> junk2 = new ObservableCollection<Junk>() {
new Junk() { Junk1 = "fjkdfhsdjk", Junk2 = "fdjkah;" },
new Junk() { Junk1="", Junk2 = "asdfj" } };
void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
this.cbo.ItemsSource = junk1;
}
private void btn_Click(object sender, RoutedEventArgs e)
{
if (this.cbo.ItemsSource == junk1)
this.cbo.ItemsSource = junk2;
else
this.cbo.ItemsSource = junk1;
this.cbo.UpdateLayout();
}
}
public class Junk
{
public string Junk1 { get; set; }
public string Junk2 { get; set; }
}
Avez-vous d'autres événements qui pourraient être licencient lorsque vous cliquez sur ce combobox (pas lorsque vous chargez)? –
Pourquoi modifiez-vous ItemsSource plutôt que de simplement changer les éléments dans ObservableCollection lui-même? En outre Junk ne dérive pas de toute représentation de l'interface utilisateur correcte? C'est juste un cours standard? –
Je ne parviens pas à reproduire ce problème dans Silverlight. – AnthonyWJones