2012-07-26 32 views
5

Ich habe zwei Kombinationsfelder in wpf eine der Combo-Box sieht so aus:Bindung Combobox an einem anderen Combobox in wpf

  <ComboBox Height="23" HorizontalAlignment="Left" Margin="244,10,0,0" Name="comboBox2" VerticalAlignment="Top" Width="120"> 
       <ComboBoxItem Content="Peugeut" /> 
       <ComboBoxItem Content="Ford" /> 
       <ComboBoxItem Content="BMW" /> 
      </ComboBox> 

Ich habe mich gefragt, wie Sie die zweite ComboBox2 binden an den ausgewählten Liste specifc Automarken Artikel in Combobox1.

Wenn Peurgeut dann in Combobox ausgewählt ist zwei eine Liste sein sollte:

106 
206 
306 

oder wenn bmw dann

ausgewählt
4 series 
5 series 

Und so weiter

+0

Sie können sich auf [Vorgehensweise: Verwenden des Master-Detail-Musters mit hierarchischen Daten] (http://msdn.microsoft.com/de-de/library/ms742531.aspx) beziehen. – Gqqnbig

Antwort

6
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="50"/> 
     <RowDefinition Height="50"/> 
    </Grid.RowDefinitions> 

    <ComboBox Height="23" ItemsSource="{Binding Cars}" DisplayMemberPath="Name" HorizontalAlignment="Left" Margin="244,10,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120"/> 
    <ComboBox Height="23" Grid.Row="1" ItemsSource="{Binding SelectedItem.Series, ElementName=comboBox1}" HorizontalAlignment="Left" Margin="244,10,0,0" Name="comboBox2" VerticalAlignment="Top" Width="120"/> 

</Grid> 

    public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Cars = new ObservableCollection<Car>(); 
     Cars.Add(new Car() { Name = "Peugeut", Series = new ObservableCollection<string>() { "106", "206", "306" } }); 
     Cars.Add(new Car() { Name = "Ford", Series = new ObservableCollection<string>() { "406", "506", "606" } }); 
     Cars.Add(new Car() { Name = "BMW", Series = new ObservableCollection<string>() { "706", "806", "906" } }); 
     DataContext = this; 

    } 

    public ObservableCollection<Car> Cars { get; set; } 

} 
public class Car 
{ 
    public string Name { get; set; } 
    public ObservableCollection<string> Series { get; set; } 
} 

ich hoffe, das hilft.

+0

Danke funktioniert perfekt +1 alle. –

+0

können Sie mir Ihren Code zeigen, es hat gut mit mir gearbeitet. – ethicallogics

+0

Das ist so hilfreich! – HoKy22

0

Versuchen Sie, die Elemente hinzufügen in Box2 programmatisch, wenn das Element ComboBox1 vom Benutzer ausgewählt wird.

 if (combobox1.SelectedText == "Peurgeut") 
     { 
      box2.Items.Add("106"); 
      box2.Items.Add("206"); 
      box2.Items.Add("306"); 
     } 
+0

SelectedText steht nicht in wpf, und der ausgewählte Wert oder das Element gibt einen unbeabsichtigten Referenzvergleich. –

1

Sofern Sie die Daten nicht nachschlagen, glaube ich nicht, dass Sie es mit nur XAML tun können. Wenn Sie jedoch eine Klasse erstellt, um Ihre Combo-Boxen binden könnten Sie eine Klasse mit so etwas wie haben:

public class CarMake 
{ 
    public string Make {get; set;} 
    public List<string> Models {get; set;} 
} 

Dann in Ihrem ersten Combo-Box, binden nur auf eine Instanz Liste mit den Informationen bevölkert, dann binden das zweite Kombinationsfeld wie:

<ComboBox ItemsSource="{Binding ElementName=FirstComboBox, Path=SelectedItem.Models}" ></ComboBox> 

das bekommen sollten Sie gehen ...

Verwandte Themen