2016-04-04 4 views
1

У меня есть связанный с данными список в элементе управления WPF. Все, что я хочу, это текст выбранного индекса. Если я использую SelectedItem.ToString, я получаю ключ и текст. Если я использую SelectedValue.ToString, я получаю только ключ.Получить текст выбранного элемента в списке WPF

Несколько форумов предложили кастинг, как показано ниже, но это, похоже, не работает.

InputName nameInput = new InputName((ListBoxItem)LbContractors.SelectedItem.ToString())); 

Вот как я связываю контроль. Это беспорядок.

LbContractors.ItemsSource = myDictionary; 
LbContractors.SelectedValuePath = "Key"; 
LbContractors.DisplayMemberPath = "Value"; 
+0

Если вы можете получить ключ, то почему бы не просто получить значение из словаря? –

+0

В этот момент словарь выходит за рамки. Я загружаю элементы из базы данных SQL. Я использую словарь как временный держатель. Полагаю, я мог бы заставить словарь зацепиться, но почему я не могу просто взять текст, как в winform. – Jeebwise

+0

У LbContractors все еще есть его копия, поскольку она нуждается в ней, поэтому вы всегда можете ее захватить у LbContractors.ItemsSource. Хотя есть, вероятно, лучшее решение, это всего лишь один способ. –

ответ

4

Это должно сделать трюк.

(LbContractors.SelectedItem as ListBoxItem).Content.ToString(); 

UPDATE

Или попытаться сделать это. Преобразуйте в Nullable KeyValuePair и получите значение.

var kvp = (KeyValuePair<string, object>?) LbContractors.SelectedItem); 
if(kvp != null && kvp.Value != null) { 
    string selectedText = kvp.Value.ToString(); 
} 

В одной строке с проверкой нулевой :)

string selectedText = ((KeyValuePair<string, object>?) LbContractors.SelectedItem)?.Value?.ToString(); 
+0

Когда я использую это, я получаю исключение нулевой ссылки. Есть ли где-то особенное, что я должен использовать этот вызов. Прямо сейчас я пытаюсь использовать это событие в событии OnClick для контекстного меню. – Jeebwise

+0

См. Обновленный ответ, дайте мне знать, как это происходит :) –

0

Почему бы не использовать LblContractors.Text;, если это все, что вы ищете?

0

почему я не могу просто взять текст, как я сделал в WinForm

Можно ли объект должным образом де-ссылки ....

Все, что я хочу текст выбранного индекса.

Но что должно должно быть ToString() текст структурной редукции ключевого значения в соответствии с вашим примером? У вас есть ToString() перегружен?

два вопроса Resolve

  1. Вы уверены, что SelectedItem не равно нулю? Перед этим обращайтесь к этому условию.
  2. Нужно бросить в соответствующую структуру (КВП), вместо того, чтобы слепо вызов ToString() и ссылки соответствующее свойство либо Key или Value.

В противном случае здесь примеры.Первый из них является ListBox привязан к словарю

myDictionary = new Dictionary<string, string>() 
       { 
        {"Alpha", "The First Letter"}, 
        {"Beta", "The Second Letter"}, 
        {"Omega", "Omega Letter"}, 
       }; 

По мере того как пользователь выбирает каждый элемент, ключ и ценность шоу в текстовых полях ниже LISTBOX:

enter image description here

Xaml

<ListBox Name="lbDictionary" 
      ItemsSource="{Binding myDictionary}" 
      SelectedValuePath="Key" 
      DisplayMemberPath="Value"/> 

И доступ к ним в текстовых окнах (Я не показываю ярлыки «Ключ», и «Значение» для краткости)

<TextBlock Text="{Binding SelectedItem.Key, ElementName=lbDictionary}"/> 
... 
<TextBlock Text="{Binding SelectedItem.Value, ElementName=lbDictionary}"/> 

Следовательно, для доступа в коде позади для Key как таковой, Value бы то же самое:

if (lbDictionary.SelectedItem != null) 
    MessageBox.Show(((KeyValuePair<string, string>) (lbDictionary.SelectedItem)).Key); 
else 
    MessageBox.Show("Select something"); 
Смежные вопросы