我无法访问我要添加到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?
答案 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
属性。