ListBox SelectionChanged事件:获取更改前的值

时间:2015-07-20 15:53:16

标签: c# wpf xaml

我正在开发一个C#wpf应用程序,其中有一个列表框,我想获得在更改发生之前选择的元素的值

我成功地以这种方式获得了新价值:

<ListBox SelectionChanged="listBox1_SelectedIndexChanged"... />

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        test.add(listBox1.SelectedItem.ToString());
    }

但我需要像listBox1.UnselectedItem这样的东西来获取在更改期间未被选中的元素。有什么想法吗?

2 个答案:

答案 0 :(得分:6)

SelectionChangedEventArgs有一个名为RemovedItems的属性,其中包含使用新选择删除的项目列表。您可以将EventArgs替换为SelectionChangedEventArgs并访问参数的属性(Casting也可以,因为它是一个子类)。

    private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        List<string> oldItemNames = new List<string>();
        foreach(var item in e.RemovedItems)
        {
            oldItemNames.Add(item.ToString());
        }
    }

答案 1 :(得分:3)

一种简单的方法是使用private int _selectedIndex存储SelectedIndex属性中的值,如下所示:

private int _selectedIndex;

private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    test.add(listBox1.SelectedItem.ToString());

    // grab the _selectedIndex value before we update it.
    var oldValue = _selectedIndex;
    _selectedIndex = listBox1.SelectedIndex;

   // code utilizing old and new values
   // oldValue stores the index from the previous selection
   // _selectedIndex has the value from the current selection
}