2012-02-08 16 views
3

リストボックス内のバインドされたテキストブロックから文字列を取得する際に問題があります。以下のコードを使用するとリストボックスをバインドでき、リストボックスにアイテムが表示されますリスト内の項目は、私は適切な文字列を取得していないクリックすると、私はバインドされたリストボックスから選択されたアイテムの文字列を取得する

「MyApp.Item」

のようなオブジェクト名を持つメッセージが代わりに現れるメッセージボックスを印刷します。 myAppはアプリの名前、Itemはリストボックスにバインドしているモデルの名前です。リストボックスがバインドされていないときに、選択した項目の適切なテキストが表示されました。

private void listBoxtrend_Tap(object sender, GestureEventArgs e) 
{ 
    selectedText = ""; 

    selectedText = listBox.SelectedValue.ToString(); 

    MessageBox.Show(selectedText); 
} 

XML

<ListBox ItemsSource="{Binding Item}" Foreground="RoyalBlue" 
    Height="395" HorizontalAlignment="Center" 
    Margin="12,111,0,0" Name="listBox" 
    VerticalAlignment="Top" Width="438" 
    TabIndex="10" Tap="listBox_Tap" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock TextWrapping="Wrap" FontSize="26" HorizontalAlignment="Left" 
       Name="tblItem" Text="{Binding ItemString}" 
       VerticalAlignment="Top" /> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

あなたはプロパティがValueMemberで指定されていない場合のおかげ

答えて

8

DataTemplateのTextBlockのItemStringとListViewのItem Collectionにバインドしています。したがって、SelectedValueはItemタイプになります。あなたが実際にItemStringの値で得るためにあなたのタップハンドラ内でこのような何かをやっている必要があります...

private void listBoxtrend_Tap(object sender, GestureEventArgs e) 
{ 
    selectedText = ""; 

    var selected = listBox.SelectedValue as Item; 
    selectedText = selected.ItemString; 

    MessageBox.Show(selectedText); 
} 

あなたの例では、ToStringは、クラスの名前を印刷しています。また、ItemモデルのToStringを、文字列にしたいものに上書きすることもできます。

注:種類などは少しばかりかもしれませんが、私はあなたの質問に書いた内容に基づいています。また、selectedTextを上の3行目で上書きされる空の文字列に設定する必要はありません。私はあなたがあなたのコードで変更したもののいくつかのアイデアを得ることができるように、それを保持したかったのです。

+0

治療をしましたが、すばやく答えてくれてありがとう。 –

+0

あなたはこれを行うには – scottheckel

+0

理想的な方法.. ..ありがとう.. – db42

0

listBox.SelectedItem.ToString() 

を試してみてください私を助けることができれば、私は本当にその後、SelectedValueの戻りいただければと思いますオブジェクトのToStringメソッドの結果

1

リストボックスのSelectedItemも何かに設定する必要があります。

SelectedItem = {Binding SelectedItem} 

あなたのItemsSourceの名前を「Items」に変更してください。

あなたの分離コードやあなたのViewModelであなたのSelectedItemは、プロパティが含まれている必要があります。

public class Item 
{ 
    public string ItemString { get;set; } 
} 
1

それは、次の試してください、非常に簡単です

string ListBoxConent = ((ListBoxItem)listbox.SelectedItem).Content.ToString(); 
3

...これを試してみてください。

string selectedText = ListBox.GetItemText(ListBox.SelectedItem); 
関連する問題