使用带有ComboBox的模型

时间:2015-11-20 11:39:26

标签: c# wpf combobox

我无法访问我要添加到ComboBox的模型的ID。目前我有一个包含ID和文本的模型preset。我通过OleDB创建presets列表,然后在将内容添加到ComboBox之前过滤列表。这是执行此操作的代码;

        var ps = new PresetService();
        List<PresetModel> presetList = ps.HandleGetPresets();
        List<PresetModel> filteredList = presetList.Where(filteredPreset => filteredPreset.PresetReferenceFoxPro == 3).ToList();

        try
        {
            foreach (PresetModel preset in filteredList)
            {
                presetComboBox.Items.Add(preset.PresetText);
            }
        }
        catch (Exception ex)
        {
            var hEs = new HandleExceptionService();
            hEs.HandleException(ex.ToString());
            return false;
        }

您可以在此处看到我将preset's文字添加到ComboBox。但是,如果有人想要使用presets之一添加公司,则会出现此问题。在这种情况下,我实际上对文本不感兴趣,我只想将preset's ID添加到公司的数据库中。

使用SelectedItem不允许我访问ID,它返回null异常。这就是我试过的

var selectedPreset = presetComboBox.SelectedItem as PresetModel;
var presetIDToAdd = selectedPreset.PresetID;

我认为这不起作用,因为我只是将preset's文本值添加到ComboBox而不是它的ID。如何将preset添加到ComboBox,只显示文字但在需要时访问该ID?

1 个答案:

答案 0 :(得分:2)

这里的问题是您要将PresetText添加到ComboBox,而不是PresetModel本身:

presetComboBox.Items.Add(preset.PresetText);

最重要的是,您正在尝试将SelectedItem转换为PresetModel,但它实际上是PresetText

我建议使用以下方法。

首先,将整个对象添加到ComboBox,如下所示:

presetComboBox.Items.Add(preset);

然后,您可以在ItemTemplate上定义ComboBox以显示PresetText,以简化操作,只需设置DisplayMemberPath }:

<ComboBox ...
          DisplayMemberPath="PresetText"/>

这样您就可以将SelectedItem转换为PresetModel,但仍会在PresetText中显示ComboBox属性。