如何从ListBoxItem的控件中获取值?

时间:2012-04-06 12:54:46

标签: wpf silverlight windows-phone-7

我有一个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; }  
        }

4 个答案:

答案 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);
        }