wpf 从组合框中获取选定项名称

fgw7neuy  于 2022-11-18  发布在  其他
关注(0)|答案(3)|浏览(236)

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

<dxb:BarEditItem.EditTemplate>
<DataTemplate>
    <dxe:ComboBoxEdit x:Name="PART_Editor"
                      SelectedIndexChanged="OnSelectedIndexChanged" Name="comboBox">
        <dxe:ComboBoxEdit.Items>
            <system:String>Item1</system:String>
            <system:String>Item2</system:String>
        </dxe:ComboBoxEdit.Items>
    </dxe:ComboBoxEdit>
</DataTemplate>

我如何在后端添加代码,以便在消息框中获取选定的名称?

y1aodyip

y1aodyip1#

是否要在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
}
zfycwa2u

zfycwa2u2#

我不确定“选择的名称”是什么意思,所以我假设您希望获得组合框中显示的文本,它表示选定的项。
一旦你有了组合本身在你手中:

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e)
{
    var combo = (ComboBoxEdit)sender;
    (...)
}

您有几种选择。最可靠的一种(在我看来)是使用combo.DisplayText属性,它是一个只读属性,保存应该在组合框中显示的实际文本(考虑DisplayMember属性、DisplayTextConverter属性和CustomDisplayText事件)。
另一个选项(在您的特定情况下)将是(string)combo.SelectedItem。但请注意,combo.SelectedItem返回实际选定的项,而不是它的文本表示。只要项的类型是string,上述方法就可以。如果不是,您将得到InvalidCastException。此外,在这种情况下,* 您所得到可能不是您所看到的 *(如前面段落中所述,有几种方法可以修改显示的文本)。
还有一个选项是combo.Text,它考虑DisplayMember,但不考虑DisplayTextConverterCustomDisplayText

编辑

结果发现,在引发SelectedIndexChanged时,DisplayText属性还没有更新以反映新选择的项(这并不特别令人惊讶)。要解决这个问题,您应该“推迟”对DisplayText值的检索。我个人会沿着以下思路进行操作(使用与combo关联的Dispatcher):

private void OnSelectedIndexChanged(object sender, RoutedEventArgs e)
{
    var combo = (ComboBoxEdit)sender;
    combo.Dispatcher.BeginInvoke(new Action(() =>
    {
        var text = combo.DisplayText;
        (...)
    }));
}
b1payxdu

b1payxdu3#

只需键入comboboxName.Text,您将获得组合框的选定项

相关问题