Come impostare Itemssource su una casella combinata all'interno di un DataTemplate in modo dinamico?
-
06-07-2019 - |
Domanda
Ho un Listbox
e ho applicato un DataTemplate
come questo
<ListBox>
<ListBox.ItemTemplate>
<Grid>
<TextBlock Text="{Binding Path=Name}" Grid.Row=0/>
<ComoboBox Name="test"
DisplayMemberPath="Country"
SelectedValuePath="Country_ID">
</Grid>
- Come caricherò
ItemSource
su questoComboBox
in modo dinamico in base a ciascun elemento selezionato inListBox
? Sono nuovo di WPF ... ti prego di aiutarti con i tuoi preziosi suggerimenti.
Soluzione
<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>
Ora la tua combocbox ha sempre la stessa fonte di elementi della casella di riepilogo padre.
Altri suggerimenti
Un modo per farlo è quello di associare ItemsSource di ComboBox alla proprietà SelectedValue di ListBox. Perché ciò funzioni, ListBox deve essere associato a una raccolta di elementi che contiene un elenco di elementi a cui verrà associato ComboBox.
<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"
/>
In questo esempio ho creato una proprietà pubblica nel codice dietro la finestra che espone un elenco di oggetti contenente la raccolta Dettagli.
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; }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow