2012-07-26 17 views
5

mam dwa pola kombi w WPF jednego z pól kombi wygląda tak:wiążących combobox do innego combobox w 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> 

Zastanawiałem się, w jaki sposób wiążą drugą combobox2 do listy SZCZEGÓLNE marek samochodów do wybranego pozycja w combobox1.

Jeśli Peurgeut wybiera się następnie w combobox dwóch nie powinno być lista:

106 
206 
306 

czy bmw wybrano następnie

4 series 
5 series 

I tak dalej

+0

Możesz odwoływać się do [Jak: Użyj wzorca szczegółowego wzorca z danymi hierarchicznymi] (http://msdn.microsoft.com/en-us/library/ms742531.aspx). – Gqqnbig

Odpowiedz

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

mam nadzieję, że to pomoże.

+0

Dzięki działa idealnie +1 dla wszystkich. –

+0

możesz pokazać mi swój kod, który działał dobrze ze mną. – ethicallogics

+0

Jest to pomocne! – HoKy22

0

spróbować dodać elementy w polu 2 programowo, gdy element ComboBox1 jest wybierany przez użytkownika.

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

SelectedText nie jest wpf, a wybrana wartość lub element daje niezamierzone porównanie porównawcze. –

1

Jeśli nie spojrzysz na dane, nie sądzę, że możesz to zrobić tylko przy użyciu XAML. Jeśli jednak utworzono klasę powiązać pola kombi można mieć klasę z czymś takim:

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

Następnie w pierwszym polu kombi, tylko wiążą się z wystąpieniem listy z informacją zaludnione, a następnie wiążą drugie pole kombi jak:

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

to powinno Ci będzie ...