2017-03-20 104 views
1

所以我在我的Windows窗體項目中使用下面的代碼,一切工作正常。現在我想在我的wpf項目中使用此代碼,但第二個組合框(cbFahrzeugModell)顯示另一個組合框項目的數據,idk爲什麼。c#WPF組合框數據不顯示正確的數據

所以,總結一下: 2 Comboboxes(cbFahrzeugHersteller和cbFahrzeugModell)。 如果我在cbFahrzeugHersteller中選擇了一個項目,那麼比cbFahrzeugModell應該在cbFahrzeugModell中顯示適當的項目。它顯示項目,但它顯示cbFahrzeugHersteller的錯誤ItemIndex的數據。

 private void cbFahrzeugHersteller_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     cbFahrzeugModell.IsEnabled = true; 
     cbFahrzeugModell.Items.Clear(); 
     cbFahrzeugModell.Text = ""; 

     try 
     { 
      connection.Open(); 

      OleDbCommand command = new OleDbCommand(); 
      command.Connection = connection; 
      string query = "SELECT DISTINCT Modell FROM Autos WHERE Hersteller = @FahrzeugHersteller;"; 
      command.CommandText = query; 
      command.Parameters.Add("@FahrzeugHersteller", SqlDbType.Text); 
      command.Parameters["@FahrzeugHersteller"].Value = cbFahrzeugHersteller.Text; 
      OleDbDataReader reader = command.ExecuteReader(); 
      while (reader.Read()) 
      { 
       cbFahrzeugModell.Items.Add(reader["Modell"].ToString()); 
      } 

      connection.Close(); 
     } 
     catch (Exception ex) 
     { 
      System.Windows.Forms.MessageBox.Show("Error " + ex); 
     } 
    } 

回答

0

SelectionChanged情況下,ComboBoxText屬性將是以前的選擇。嘗試鑄造cbFahrzeugHersteller.SelectedValuecbFahrzeugHersteller.SelectedItem。另一種選擇是e.AddedItems[0]。我猜測,其中的任何一個都是字符串,但是因爲你沒有說明它可能是其他的東西。如果是這種情況,您需要設置一個斷點並通過檢查監視窗口中的這些屬性來確定究竟是什麼。

如果您嘗試將Winforms代碼直接轉換爲WPF,則會遇到像這樣的無盡問題。這兩個框架在很大程度上有所不同。如果你打算堅持使用WPF,你應該學習MVVM,並按照自己的方式來處理WPF。試圖在WPF中編寫Winforms代碼是一種保證讓自己悲慘的方法。

在WPF的ComboBox.Text財產的重要標準是,經過5年時間寫WPF專業每一天,堆棧溢出回答問題的,我感到十分詫異地發現,System.Windows.Controls.ComboBox一個Text屬性。

+1

使用cbFahrzeugHersteller.SelectedValue,謝謝你! –