2016-04-04 64 views
1

WPFコントロールにデータバインドリストボックスがあります。私が欲しいのは、選択したインデックスのテキストだけです。 SelectedItem.ToStringを使用すると、キーとテキストが取得されます。 SelectedValue.ToStringを使用すると、私はキーだけを取得します。WPFリストボックスで選択した項目のテキストを取得

いくつかのフォーラムでは以下のようなキャストが提案されていますが、動作していないようです。

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

これは、コントロールをバインドする方法です。それはそれを台無しにしていますか?

+0

あなただけ取得できない理由キーを、得ることができる場合辞書の価値? –

+0

その時点で、辞書は範囲外です。私はSQLデータベースからアイテムを読み込みます。私は一時的な所有者として辞書を使用します。私は辞書をつけることができると思うが、どうして私がwinformで行ったようにテキストをつかむことができないのだろうか。 – Jeebwise

+0

LbContractorsにはLbContractors.ItemsSourceからいつもそれを得ることができるように、LbContractorsには必要なコピーが残っています。おそらくもっと良い解決策がありますが、これはちょうど一つの方法です –

答えて

4

これはトリックを行う必要があります。

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

UPDATE

それともこれを行うにしてみてください。 Nullable KeyValuePairに変換して値を取得します。それはあなたが探しているすべてだ場合LblContractors.Text;を使用しないのはなぜヌルチェックと一行:)

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

私はそれを使ってヌル参照例外を取得します。私はその電話を使わなければならない特別な場所がありますか?今は、コンテキストメニューのOnClick raisedイベントでそれを試しています。 – Jeebwise

+0

更新された回答を見る、それがどうなるか教えてください:) –

0

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

0
オブジェクトが正しくデ参照されている場合、私はWinフォーム

一つの缶に行ったように、私は単純にテキストをつかむことができない理由

....

私が欲しいのです選択されたインデックスのテキスト

しかし、ToString()のキーバリューペア構造のテキストは、あなたの例に応じてどうなるでしょうか? ToString()が過負荷になっていますか?

2つの問題が

  1. を解決するには、のSelectedItemがnullでないことを確認していますか?アクセスする前にその状態を確認してください。
  2. 一つは、適切な構造(KVP)の代わりに盲目的ToString()参照Key又はValueいずれかの適切なプロパティを呼び出すにキャストすべきです。そうでない場合は、ここで

がその例です。

enter image description here

XAML

:ユーザーはキーと値がリストボックス以下のテキストボックスに表示され、それぞれの項目を選択するように、第1辞書

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

に結合してリストボックスであります

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

テキストボックスでのアクセス(「Key」のラベルは表示されません)そしてKeyのための簡潔ための「値」)の背後にあるコードでアクセスにしたがって

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

のようなある、Valueは同じのようになります。

if (lbDictionary.SelectedItem != null) 
    MessageBox.Show(((KeyValuePair<string, string>) (lbDictionary.SelectedItem)).Key); 
else 
    MessageBox.Show("Select something"); 
関連する問題