2015-07-20 122 views
2

我正在处理一个C#wpf应用程序,其中有一个列表框,并且我想获取在发生更改之前选择的元素的值ListBox SelectionChanged事件:获取它被更改之前的值

我成功地得到了新的价值是这样的:

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

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

但我需要这样的东西listBox1.UnselectedItem获得这一变化过程中是未选中的元素。任何想法 ?

+0

该值应该在事件参数中。 – Taekahn

+0

@Taekahn如果你知道一个简单的方法来从'EventArgs'获取值,那么我会推荐发布一个答案 – ean5533

+0

[MSDN](https://msdn.microsoft.com/en-us/library/system.windows。 controls.selectionchangedeventargs(v = vs.110).aspx)来拯救。 –

回答

5

SelectionChangedEventArgs有一个名为RemovedItems属性,它包含了新的被拆除的项目清单选择。您可以用SelectionChangedEventArgs代替EventArgs并访问参数的属性(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()); 
     } 
    } 
+0

它的作品,它很漂亮!非常感谢 ! –

2

一个简单的方法是有一个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 
} 
+0

好吧,我想我可以自己想想!谢谢你写下整件事:-) –

+0

很好的答案。你实际上引发了我对这件事的兴趣。 – Adam

相关问题