从组合框中获取所选项目名称

时间:2016-04-29 03:17:38

标签: c# .net wpf xaml combobox

我有一个组合框,如下面的代码所示。我想在选择它时在消息框中显示选择的名称。我正在尝试的是 -

@RouteConfig([
    {path:'/result1', name: 'Result1', component: Result1},
    {path:'/result2', name: 'Result2', component: Result2},
    //and something like that
])

如何在后端添加代码以在消息框中获取所选名称?

2 个答案:

答案 0 :(得分:2)

你的意思是在SelectedIndexChanged事件上处理这个吗?如果是这样,你可以获得触发事件的组合框。

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e)
{
    ComboBox cb = (ComboBox)sender;
    string selectedText = cb.SelectedText;
    //Code to display the selectedText into a message box
}

答案 1 :(得分:1)

我不确定“选择名称”是什么意思,所以我假设你想要掌握组合中显示的文字,它代表所选的项目。

一旦你手中有了这个组合:

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e)
{
    var combo = (ComboBoxEdit)sender;
    (...)
}
你有几个选择。最可靠的(在我看来)是使用combo.DisplayText属性,这是一个只读属性,包含应该在组合中显示的实际文本(考虑DisplayMember属性,{{ 1}} property和DisplayTextConverter event)。

另一个选项(在您的特定情况下)将是CustomDisplayText。但请注意,(string)combo.SelectedItem返回实际选定的项目而不是文本表示。只要项目类型为combo.SelectedItem,上述内容就可以了。如果不是,你会得到string。此外,在这种情况下,你可能得到的内容可能不是你所看到的(如前一段所述,有几种方法可以修改显示的文本)。

另一个选项是InvalidCastException,其中考虑了combo.Text,但不考虑DisplayMemberDisplayTextConverter

修改

事实证明,在CustomDisplayText被引发时,SelectedIndexChanged属性尚未更新以反映新选择的项目(这并不特别令人惊讶)。为了解决这个问题,你应该“推迟”DisplayText值的检索。我个人会沿着这些方向(使用与组合相关联的DisplayText):

Dispatcher