我有一个带有图像的列表框,使用了here找到的相同方法。
这是一个包含项目模板的列表框,其中包含图像和文本块。如何获取列表框的选定值?
像这样:
string x = listbox.SelectedValue.ToString();
这不会给我文本块的值。有什么想法吗?
解答:
以下是答案:
listboxBinding_Master.Detail.SampleData selectedValue = (listboxBinding_Master.Detail.SampleData)listBox1.SelectedItem;
string x = selectedValue.ListBoxText;
Sampledata是我用来定义字符串的类,ListBoxText是TextBlock的名称。
答案 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; }
}