我有一个ListBox和绑定学生,我想点击“Btn”时得到“ID”。但是,我不知道怎么做。请告诉我该怎么做?
XAML:
<ListBox x:Name="listBox">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Margin="12">
<TextBlock Text="{Binding Name,StringFormat=Name:\{0\}}"
Foreground="Orange"/>
<TextBlock Text="{Binding Age,StringFormat=Age:\{0\}}"
Foreground="Gray"/>
<Button Content="Get ID Of Student"
x:Name="Btn"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
C#:
List<Student> students = new List<Student>
{
new Student{Name = "st1",Age = 20,ID = 1},
new Student{Name = "st2",Age = 18,ID = 2},
new Student{Name = "st3",Age = 21,ID = 3},
};
listBox.ItemsSource = students;
public class Student
{
public string Name { get; set; }
public int Age { get; set; }
public int ID { get; set; }
}
答案 0 :(得分:3)
将ID
字段绑定到按钮上的CommandParameter
属性
<Button Content="Get ID Of Student"
x:Name="Btn"
CommandParameter="{Binding ID}"
... />
然后您的Command
会自动通过ID
作为参数
如果您使用Click
事件而不是Command
属性,则可以将sender
转换为Button
并检查CommandParameter
,或者您可以将其DataContext
作为Student
对象投射并从中获取ID
void Btn_Click(object sender, EventArgs e)
{
Button b = sender as Button;
int id = (int)b.CommandParameter;
// or
Student student = (Student)b.DataContext;
int id = student.ID;
}
答案 1 :(得分:0)
怎么样:
Student selectedStundet = listBox.SelectedItem as Student;
答案 2 :(得分:0)
<Button Content="Get ID Of Student" x:Name="Btn" Tag={Binding ID} Click="Button_Click" />
private void Button_Click(object sender, RoutedEventArgs e)
{
Button b = (Button)sender;
string id = b.Tag;
...
}
然后你让学生使用LINQ,就像这样:
Student a = from student in Students
student.ID=(int)id
select student;
答案 3 :(得分:0)
试试这个:
private void Btn_Click(object sender, RoutedEventArgs e)
{
Student st = (sender as Button).DataContext as Student;
MessageBox.Show(st.ID + "\n" + st.Age + "\n" + st.Name);
}