2009-08-20 9 views
3

Je veux lier le combo avec ensemble de données et de prendre la valeur de combo en tant que paramètre pour remplir un autre combo dans WPFComment lier zone de liste déroulante avec jeu de données dans WPF

+0

C'est bien. Quelle est votre question? –

+0

Trop vague. Si vous voulez que les gens mettent l'effort dans les réponses, vous devrez mettre l'effort dans la question. Besoin de plus de détails un extrait de code ne ferait pas de mal non plus. – Charlie

Répondre

4

Cela devrait vous aider à démarrer. L'événement Window_Loaded définit un DataTable avec quelques lignes et définit les DataContext et DisplayMemberPath d'un ComboBox. L'événement Countries_SelectionChanged saisit le SelectedItem (s'il y en a un) et réinitialise la propriété Cities.ItemsSource pour être le résultat d'un appel de méthode, qui renvoie un IEnumerable<string>. Cet appel peut être ce que vous voulez (appel de base de données, opération de fichier, etc.). J'espère que cela t'aides!

<UniformGrid Rows="2" Columns="2"> 
    <Label Content="Countries" VerticalAlignment="Center"/> 
    <ComboBox Name="Countries" VerticalAlignment="Center" SelectionChanged="Countries_SelectionChanged" ItemsSource="{Binding}"/> 
    <Label Content="Cities" VerticalAlignment="Center"/> 
    <ComboBox Name="Cities" VerticalAlignment="Center"/> 
</UniformGrid> 

private void Window_Loaded(object sender, RoutedEventArgs e) { 
    DataTable dt = new DataTable(); 
    dt.Columns.Add("Country", typeof(string)); 

    DataRow firstRow = dt.NewRow(); 
    DataRow secondRow = dt.NewRow(); 
    firstRow["Country"] = "USA"; 
    secondRow["Country"] = "Italy"; 
    dt.Rows.Add(firstRow); 
    dt.Rows.Add(secondRow); 

    Countries.DisplayMemberPath = "Country"; 
    Countries.DataContext = dt; 
} 

private void Countries_SelectionChanged(object sender, SelectionChangedEventArgs e) { 
    DataRowView dr = Countries.SelectedItem as DataRowView; 
    if (dr != null) { 
     Cities.ItemsSource = null; 
     Cities.ItemsSource = GetCities(dr["Country"].ToString()); 
    } 
} 

private IEnumerable<string> GetCities(string country) { 
    if (country == "USA") 
     return new []{ "New York", "Chicago", "Los Angeles", "Dallas", "Denver" }; 
    if (country == "Italy") 
     return new[] { "Rome", "Venice", "Florence", "Pompeii", "Naples" }; 
    return new[] { "" }; 
} 
Questions connexes