Comment définir Itemssource sur une liste déroulante à l'intérieur d'un DataTemplate de manière dynamique?
-
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>
- Comment charger
ItemSource
dans ceComboBox
en fonction de chaque élément sélectionné dans leListBox
? Je suis nouveau sur WPF ... pls aide avec vos précieuses suggestions.
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