ListView.ContainerFromItem gibt null zurück, nachdem ein neues Element in Windows 8.1 Store XAML hinzugefügt wurde
Ich habe eine einfache ListView ohne Elementvorlage und das SelectionChanged-Ereignis-Setup:
<ListView x:Name="list1" HorizontalAlignment="Left"
Height="556"
Margin="209,93,0,0"
VerticalAlignment="Top"
Width="1033"
SelectionChanged="list1_SelectionChanged" />
private void list1_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var container = (sender as ListView).ContainerFromItem(e.AddedItems.First());
var presenter = VisualTreeHelper.GetChild(container, 0);
}
Ich habe auch eine Testklasse wie folgt:
class Test
{
public string FirstName { get; set; }
public string Surname { get; set; }
}
Jetzt habe ich im Konstruktor für die Seite den folgenden Code, der eine ObservableCollection der Testelemente erstellt, einige hinzufügt und diese dann als ItemSource der ListView festlegt:
ObservableCollection<Test> testCollection;
public MainPage()
{
this.InitializeComponent();
testCollection = new ObservableCollection<Test>();
testCollection.Add(new Test { FirstName = "Bob", Surname = "Smith1" });
testCollection.Add(new Test { FirstName = "Bob", Surname = "Smith2" });
testCollection.Add(new Test { FirstName = "Bob", Surname = "Smith3" });
list1.ItemsSource = testCollection;
}
Wenn ich nun ein Element in der Liste auswähle und das SelectionChanged-Ereignis ausgelöst wird, enthält die Containervariable das ListViewItem wie erwartet.
Jetzt habe ich auch einen Button im Formular. Hier ist das Button-Klick-Ereignis:
private void Button_Click(object sender, RoutedEventArgs e)
{
testCollection.Add(new Test { FirstName = "Bob", Surname = "Smith4" });
list1.SelectedIndex = list1.Items.Count - 1;
}
Die letzte Zeile wählt das neue Element aus und das SelectionChanged-Ereignis wird ausgelöst, aber dieses Mal ist die Containervariable null.
Kann mir jemand sagen, warum dies null ist und wie ich das umgehen kann?
Vielen Dank