ListView.ContainerFromItem devuelve nulo después de agregar un nuevo elemento en la tienda de Windows 8.1 XAML
Tengo un ListView simple sin plantilla de elemento y la configuración del evento SelectionChanged:
<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);
}
También tengo una clase de prueba de la siguiente manera:
class Test
{
public string FirstName { get; set; }
public string Surname { get; set; }
}
Ahora, en el constructor de la página, tengo el siguiente código que crea una colección ObservableCollection de los elementos de prueba, agrega algunos y luego los configura como ItemSource de ListView:
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;
}
Ahora, cuando selecciono un elemento en la lista y se activa el evento SelectionChanged, la variable contenedor contiene el ListViewItem como se esperaba.
Ahora, también tengo un botón en el formulario, aquí está el evento de clic de botón:
private void Button_Click(object sender, RoutedEventArgs e)
{
testCollection.Add(new Test { FirstName = "Bob", Surname = "Smith4" });
list1.SelectedIndex = list1.Items.Count - 1;
}
La última línea selecciona el nuevo elemento y se activa el evento SelectionChanged, pero esta vez la variable contenedor es nula.
¿Alguien puede decirme por qué esto es nulo y cómo puedo solucionarlo?
Gracias