2017-06-10 9 views
0

実行時にデータをどのようにしてコンボボックスにバインドできますか?私はComboboxのテンプレートフィールドを使用して、コードビハインドでComboboxアイテムソースを更新しようとします。私のコンボボックスはxamarinを更新していません。コンボボックスのテンプレートフィールドでは、イベント名がcbxDeleteStudent_Clickのボタンでコンボボックスの項目を削除します。しかし、私はコードの中でcomboxitemを見つけることができません。実行時にwpfの項目をComboboxに追加する方法

私を助けてください。

MyCodes:

<ComboBox x:Name="cbxStudents" Width="150" ItemsSource="{Binding}"> 
       <ComboBox.ItemTemplate> 
        <DataTemplate> 
         <DockPanel Width="150"> 
          <Label Content="{Binding StudentId}" x:Name="cbxStudentId"></Label> 
          <Label Content="{Binding StudentName}"></Label> 
          <Button Content="Sil" x:Name="cbxDeleteStudent" HorizontalAlignment="Right" Width="35" 
            CommandParameter="{Binding StudentId}" Click="cbxDeleteStudent_Click"></Button> 
         </DockPanel> 
        </DataTemplate> 
       </ComboBox.ItemTemplate> 
      </ComboBox> 

コード

private void btnAddNewStudent_Click(object sender, RoutedEventArgs e) 
    { 
     using (EmployeeDbContext db = new EmployeeDbContext()) 
     { 
      Student newStudent = new Student() 
      { 
       StudentName = txtStudent.Text 
      }; 
      db.Students.Add(newStudent); 

      if (db.SaveChanges() > 0) 
      { 
       MessageBox.Show(string.Format("{0} öğrencisi başarı ile eklenmiştir.", txtStudent.Text), "Bilgi", MessageBoxButton.OK); 
       txtStudent.Text = string.Empty; 
       (cbxStudents.ItemsSource as List<Student>).Add(newStudent); 

      } 
     } 
    } 

背後に削除コンボボックスの項目の

private void cbxDeleteStudent_Click(object sender, RoutedEventArgs e) 
    { 
     using (EmployeeDbContext db = new EmployeeDbContext()) 
     { 
      Student selectedStudent = db.Students.Find(int.Parse((sender as Button).CommandParameter.ToString())); 
      db.Students.Remove(selectedStudent); 
      db.SaveChanges(); 
     } 
     ((sender as Button).Parent as DockPanel).Children.Clear(); 

    } 
+1

を削除するには

(cbxStudents.ItemsSource as ObservableCollection<Student>).Add(newStudent); 

を追加する

はSOへようこそ。この[how-to-ask](http://stackoverflow.com/help/how-to-ask)を読んでそこのガイドラインに従って、プログラミングを記述するコードやエラーメッセージなどの追加情報を使用して質問を洗練してください問題。 – thewaywewere

+0

'EmployeeDbContext'クラスの定義と' DataContext'をバインドするコードを提供してください。 – kennyzx

答えて

0

それはコンボボックスにバインドするために使用さItemSourceのように見える、List<Student>です。

代わりList<T>の使用ObservableCollection(Of T)、のObservableCollectionはアイテムが追加、削除、またはリスト全体が更新されるとList<T>はそうではないコンボボックスの項目が、更新された際に取得通知を提供します。

次に、ObservableCollectionからアイテムを追加/削除するだけで、ComboxBoxのItemsプロパティに触れる必要はありません。

ObservableCollection<Student> students = cbxStudents.ItemsSource as ObservableCollection<Student>; 
int studentId = int.Parse((sender as Button).CommandParameter.ToString()); 
Student selectedStudent = students.SingleOrDefault(s => s.StudentId == studentId); 
students.Remove(selectedStudent); 
+0

完璧な答えをありがとう。 –

関連する問題