0

ListBox と Binding Students があり、"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

4 に答える 4

3

IDフィールドをCommandParameterボタンのプロパティにバインドします

<Button Content="Get ID Of Student" 
        x:Name="Btn" 
        CommandParameter="{Binding ID}" 
        ... />

次に、パラメーターとしてCommand自動的に渡されますID

プロパティClickの代わりにイベントを使用している場合は、を としてキャストしてそれを確認するか、オブジェクトとしてキャストしてそこから ID を取得できます。CommandsenderButtonCommandParameterDataContextStudent

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;
}
于 2012-04-06T12:58:45.697 に答える
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; 
于 2012-04-06T13:00:01.863 に答える
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);
        }
于 2012-04-06T15:25:12.287 に答える
0

どうですか:

Student selectedStundet = listBox.SelectedItem as Student;
于 2012-04-06T12:58:35.390 に答える