listbox selectedvalue属性没有给我选择的字符串值

时间:2012-03-13 17:11:21

标签: c# wpf listbox selectedvalue

我有一个带有图像的列表框,使用了here找到的相同方法。

这是一个包含项目模板的列表框,其中包含图像和文本块。如何获取列表框的选定值?

像这样:

string x = listbox.SelectedValue.ToString();

这不会给我文本块的值。有什么想法吗?

解答:

以下是答案:

 listboxBinding_Master.Detail.SampleData selectedValue = (listboxBinding_Master.Detail.SampleData)listBox1.SelectedItem;
 string x = selectedValue.ListBoxText;

Sampledata是我用来定义字符串的类,ListBoxText是TextBlock的名称。

1 个答案:

答案 0 :(得分:3)

ListBox.SelectedValuePath设置为Binded类中代表您需要的值的成员名称。 这样您就可以通过ListBox.SelectedValue

检索值

修改(示例):

<ListBox x:Name="TestListBox" ItemsSource="{Binding}" SelectedValuePath="LastName" MouseDoubleClick="TestListBox_MouseDoubleClick">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <StackPanel Orientation="Horizontal">
        <TextBlock Text="{Binding Path=FirstName}" Width="110" />
        <TextBlock Text="{Binding Path=Age}"/>
      </StackPanel>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

代码隐藏:

public partial class MainWindow: Window
  {
    public MainWindow( )
    {
      InitializeComponent( );
      var persons = new System.Collections.ObjectModel.ObservableCollection<Person>();
      persons.Add( new Person( ) { FirstName = "Walter" , LastName = "Bishop" , Age = 63 } );
      persons.Add( new Person( ) { FirstName = "Peter" , LastName = "Bishop" , Age = 33 } );
      persons.Add( new Person( ) { FirstName = "Olivia" , LastName = "Dunham" , Age = 33 } );
      TestListBox.DataContext = persons;
    }
    private void TestListBox_MouseDoubleClick( object sender , MouseButtonEventArgs e )
    {
      if ( TestListBox.SelectedItem != null )
      {
        MessageBox.Show( (string)TestListBox.SelectedValue );
      }
    }
  }

  public class Person
  {
    public string FirstName { get; set; }
    public string LastName{get;set;}
    public int Age { get; set; }
  }