我有一个组合框,如下面的代码所示。我想在选择它时在消息框中显示选择的名称。我正在尝试的是 -
@RouteConfig([
{path:'/result1', name: 'Result1', component: Result1},
{path:'/result2', name: 'Result2', component: Result2},
//and something like that
])
如何在后端添加代码以在消息框中获取所选名称?
答案 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
,但不考虑DisplayMember
或DisplayTextConverter
。
修改强>
事实证明,在CustomDisplayText
被引发时,SelectedIndexChanged
属性尚未更新以反映新选择的项目(这并不特别令人惊讶)。为了解决这个问题,你应该“推迟”DisplayText
值的检索。我个人会沿着这些方向(使用与组合相关联的DisplayText
):
Dispatcher