2016-03-17 2 views
0

Я добавляю ComboBoxItems так;Настройка ComboBox Элемент тега

foreach (var cntRef in presetList.Where(filteredPreset => filteredPreset.PresetReferenceFoxPro == 1).ToList()) 
{ 
    var newItem = new ComboBoxItem(); 
    newItem.Content = cntRef.PresetText; 
    newItem.Tag = cntRef.PresetIDFoxPro; 
    addCntRef1ComboBox.Items.Add(newItem); 
} 

Отображает текст без проблем. Однако у меня возникают проблемы с отображением Tag. Когда я пытаюсь получить доступ к Tag так;

if (addCntRef1ComboBox.Tag.ToString() != null) 
{ 
    MessageBox.Show(addCntRef1ComboBox.Tag.ToString()); 
} 

Ничего не отображается. Когда я удаляю null, проверьте, что программа выйдет из строя, поэтому Tag - null. Как я могу добавить ComboBoxItem с tag, к которому я могу обратиться?

ответ

4

Вы назначаете экземпляр тега ComboBoxItem не для ComboBox экземпляра.

newItem.Tag = cntRef.PresetIDFoxPro; 

И newItem это ComboBoxItem экземпляра, но тогда вы пытаетесь получить доступ Tag свойства из addCntRef1ComboBox переменных в строке

MessageBox.Show(addCntRef1ComboBox.Tag.ToString()); 

Поэтому программа ведет себя правильно.

Вы должны получить доступ к бетонной ComboBoxItem в вашем Item коллекции ComboBox, как это:

MessageBox.Show(addCntRef1ComboBox.Items[0].Tag.ToString()); 
+0

Благодарим за помощь! Кажется, я не могу использовать 'First()'. Нужно ли добавлять «использование» для этого? Он говорит, что 'ItemCollection' не имеет первого метода расширения. – CBreeze

+0

Да, вы правы, но вы можете получить доступ к коллекции элементов по индексу. Я изменил ответ, чтобы признать это. –

+0

Проблема, которую я вижу с этим решением, заключается в том, что я хочу получить доступ к выбранному 'ComboBoxItem', а не только к первой в коллекции' Items'. Я добавил свой ответ ниже, поскольку исправил проблему. – CBreeze

0

мне удалось решить эту проблему сами, используя;

SelectedValuePath="Tag" в моем ComboBoxXAML затем доступ к нему нравится;

if (addCntRef1ComboBox.SelectedValue.ToString() != null) 
{ 
    MessageBox.Show(addCntRef1ComboBox.SelectedValue.ToString()); 
}