我有一个简单的ListView,没有项目模板,并设置了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);
}
我也有一个如下的测试类:
class Test
{
public string FirstName { get; set; }
public string Surname { get; set; }
}
现在在页面的构造函数中,我有以下代码来创建一个Test项目的ObservableCollection,添加一些项目,然后将其设置为ListView的ItemSource:
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;
}
现在当我在列表中选择一个项目并触发SelectionChanged事件时,container变量如预期一样包含ListViewItem。
现在,在表单上我也有一个按钮,在这里是按钮点击事件:
private void Button_Click(object sender, RoutedEventArgs e)
{
testCollection.Add(new Test { FirstName = "Bob", Surname = "Smith4" });
list1.SelectedIndex = list1.Items.Count - 1;
}
最后一行代码选择了新的项,触发了SelectionChanged事件,但是这次container变量为null。请问有人能告诉我为什么会出现这种情况,以及我该如何解决?
谢谢!
(sender as ListView).ContainerFromItem(e.AddedItems.First()) as ListViewItem
- Amir