Comment définir Itemssource sur une liste déroulante à l'intérieur d'un DataTemplate de manière dynamique?

StackOverflow https://stackoverflow.com/questions/1216406

  •  06-07-2019
  •  | 
  •  

Question

J'ai un Listbox et un modèle de données comme celui-ci

<ListBox>
   <ListBox.ItemTemplate>
<Grid>
 <TextBlock Text="{Binding Path=Name}" Grid.Row=0/>
    <ComoboBox Name="test"
            DisplayMemberPath="Country"
            SelectedValuePath="Country_ID">
</Grid>

  1. Comment charger ItemSource dans ce ComboBox en fonction de chaque élément sélectionné dans le ListBox ? Je suis nouveau sur WPF ... pls aide avec vos précieuses suggestions.
Était-ce utile?

La solution

<ListBox>
  <ListBox.ItemTemplate>
   <Grid>
     <TextBlock Text="{Binding Path=Name}" Grid.Row=0/>
        <ComoboBox Name="test" 
           DataContent="{Binding RelativeSource={RelativeSource AncestorType=ListBox}}"                 
           ItemsSource="{Binding}"
        DisplayMemberPath="Country"
        SelectedValuePath="Country_ID">
   </Grid>

Votre combocbox a toujours la même source d’éléments que la listbox parent.

Autres conseils

Pour cela, vous pouvez lier la source ItemsSource de votre contrôle ComboBox à la propriété SelectedValue du contrôle ListBox. Pour que cela fonctionne, le ListBox doit être lié à une collection d’éléments contenant une liste d’éléments auxquels le ComboBox sera lié.

<ListBox
    x:Name="CategoryList"
    ItemsSource="{Binding Path=MasterList, 
        RelativeSource={RelativeSource AncestorType=Window}}"
    DisplayMemberPath="MasterProperty"
    SelectedValuePath="Details"
    />

<ComboBox
    ItemsSource="{Binding Path=SelectedValue, ElementName=CategoryList}"
    DisplayMemberPath="DetailProperty"
    Grid.Row="1"
    />

Dans cet exemple, j'ai créé une propriété publique dans le code situé derrière la fenêtre qui expose une liste d'objets contenant la collection Details.

public List<Master> MasterList { get; set; }

public class Master
{
    public string MasterProperty { get; set; }
    public List<Detail> Details { get; set; }
}

public class Detail
{
    public string DetailProperty { get; set; }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top