2012-04-06 14 views
0

私はListBoxとBinding Studentsを持っているので、 "Btn"をクリックすると "ID"を取得したい。しかし、私はそれを行う方法がわかりません。どうすればいいか教えてください。ListBoxItemのコントロールから値を取得するには?

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; } 
     } 

答えて

3

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

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

次に、あなたのCommandが自動的にあなたの代わりにCommand財産のClickイベントを使用している場合、あなたはButtonとしてsenderをキャストし、それがCommandParameterだチェック、またはことができますすることができ、パラメータ

としてIDを渡されますそして、あなたはあなたを得ることがStudentオブジェクトとしてDataContextのキャストとその

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; 
} 
+0

ありがとうございました。しかし、あなたの方法で、私は多くのプロパティを取得する必要がある場合、それを行う方法?例:パブリッククラスの学生(名前、年齢、身分証明書、学年、性別、ブリット、都市など)。私はそれらを手に入れたい。私は "タグ"は十分ではないと思う。 – BillyMadisonnn

+0

@BillyMadisonnn私の答えのコードの最後の2行を参照してください。 'DataContext'を' Student'オブジェクトにキャストしてから、すべての生徒のプロパティにアクセスできます。代わりに 'CommandParameter'をオブジェクト全体(' CommandParameter = "{Binding}" ')にバインドし、' CommandParameter'を 'int'の代わりに' Student'オブジェクトとしてキャストすることができます。 – Rachel

+0

ああそうです。良いアイデア!ありがとうございます。 – BillyMadisonnn

0

何について:

Student selectedStundet = listBox.SelectedItem as Student; 
+0

はあなたに感謝します。私はListBoxItemの "Btn"をクリックします。それはListBoxではないので、私はlistBox.SelectItemを得ることができません – BillyMadisonnn

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; 
     ... 
} 

からIDを取得しますLINQを使用してRの学生、このようなものは:

Student a = from student in Students 
      student.ID=(int)id 
      select student; 
+0

ありがとうございます。しかし、あなたの方法で、私は多くのプロパティを取得する必要がある場合、それを行う方法?例:パブリッククラスの学生(名前、年齢、身分証明書、学年、性別、ブリット、都市など)。私はそれらを手に入れたい。私は "タグ"は十分ではないと思う – BillyMadisonnn

+0

上記の答えを参照して、私は詳細を追加しました。 – Eugene

+0

うわー。これも解決策です。ありがとうございます – BillyMadisonnn

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); 
     } 
関連する問題