2016-07-05 6 views
1

Ich habe wpf ListBox in Dispatcher mit folgendem CodeWpf ItemContainerGenerator.ContainerFromItem null zurück

Dispatcher.BeginInvoke(new Action(() => 
       { 
        LoadData();      
       })); 

private void LoadData() 
{ 
    // Written some logic here 
} 

Es bindet die ListBox gut bindend, aber wenn ich rufe

ListBoxItem myListBoxItem = (ListBoxItem)(routeList.ItemContainerGenerator.ContainerFromItem(item)); 

Es gibt mir immer null .Problem nur auftreten, wenn ich die ListBox innerhalb Dispatcher binde. Wenn ich die gleiche ListBox in Class Constructor binde, funktioniert es gut.

Antwort

3

Artikelcontainer werden in einem separaten Dispatchervorgang generiert. Als Ergebnis haben Sie null.

Wir sollten immer über Container-Generierung als eine Operation, die asynchron ausführt, denken.

Es ist möglich zu hören StatusChanged Ereignis der ItemContainer, die Informationen darüber gibt, ob ItemConteiner erstellt wird.

Um sicher zu sein, ItemContainer generiert wird, sollten Sie an die StatusChanged Veranstaltung anschließen und auf den ContainersGenerated Status überprüfen.

Zum Beispiel:

yourListBox.ItemContainerGenerator.StatusChanged += new EventHandler(ItemContainerGenerator_StatusChanged); 

private void ItemContainerGenerator_StatusChanged(object sender, EventArgs e) 
{ 
    if (this.ItemContainerGenerator.Status == GeneratorStatus.ContainersGenerated) 
    { 
     // Do something here... 
    } 
} 

Sie können more information here finden.