Mat*_*att 83 c# wpf combobox .net-4.0 selectionchanged
C#,.NET 4.0,VS2010.
WPF新手.我的MainWindow上有一个ComboBox.我挂钩了所说组合框的SelectionChanged事件.但是,如果我检查事件处理程序中组合框的值,它具有旧值.这听起来更像是一个"SelectionChanging"事件,而不是SelectionChanged事件.
如何在选择实际发生后获取ComboBox的新值?
目前:
this.MyComboBox.SelectionChanged += new SelectionChangedEventHandler(OnMyComboBoxChanged);
...
private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
string text = this.MyComboBox.Text;
}
Run Code Online (Sandbox Code Playgroud)
注意,如果我使用在事件args,egeOriginalSource中传递的对象,我会得到相同的行为.
SwD*_*n81 98
根据MSDN, e.AddedItems
:
获取包含所选项目的列表.
所以你可以使用:
private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
string text = (e.AddedItems[0] as ComboBoxItem).Content as string;
}
Run Code Online (Sandbox Code Playgroud)
你也可以使用SelectedItem
,如果你使用string
值的Items
来自sender
:
private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
string text = (sender as ComboBox).SelectedItem as string;
}
Run Code Online (Sandbox Code Playgroud)
要么
private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
string text = ((sender as ComboBox).SelectedItem as ComboBoxItem).Content as string;
}
Run Code Online (Sandbox Code Playgroud)
由于这两个Content
和SelectedItem
是对象,一个更安全的做法是使用.ToString()
替代as string
Dav*_*der 53
要在此处检查的正确值是SelectedItem属性.
ComboBox是一个复合控件,其两个部分是:
在扩展ComboBox之后(即在选择新值之前)立即拍摄上面的图像.此时,Text和SelectedItem都是"Info",假设ComboBox项是字符串.如果ComboBox项是Enum的所有值,称为"LogLevel",则SelectedItem当前为LogLevel.Info.
单击下拉列表中的项目时,将更改SelectedItem的值并引发SelectionChanged事件.但是,Text属性尚未更新,因为在SelectionChanged处理程序完成之后,文本部件才会更新.这可以通过在处理程序中放置断点并查看控件来观察:
由于此时尚未更新文本部分,因此Text属性返回先前选择的值.
hid*_*den 46
如果您想要组合框的当前值,请使用DropDownClosed事件而不是selectionChanged.
private void comboBox_DropDownClosed(object sender, EventArgs e)
{
MessageBox.Show(comboBox.Text)
}
Run Code Online (Sandbox Code Playgroud)
真的那么简单.
小智 10
这对我有用:
private void AppName_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
ComboBoxItem cbi = (ComboBoxItem)AppName.SelectedItem;
string selectedText = cbi.Content.ToString();
}
Run Code Online (Sandbox Code Playgroud)
这为我工作:
private void OnMyComboBoxChanged(object sender, SelectionChangedEventArgs e)
{
var text = ((sender as ComboBox).SelectedItem as ComboBoxItem).Content as string;
}
Run Code Online (Sandbox Code Playgroud)
Following event is fired for any change of the text in the ComboBox (when the selected index is changed and when the text is changed by editing too).
<ComboBox IsEditable="True" TextBoxBase.TextChanged="cbx_TextChanged" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
170999 次 |
最近记录: |