¿Cómo configurar Itemssource en un cuadro combinado dentro de un DataTemplate dinámicamente?
-
06-07-2019 - |
Pregunta
Tengo un Listbox
y apliqué una DataTemplate
como esta
<ListBox>
<ListBox.ItemTemplate>
<Grid>
<TextBlock Text="{Binding Path=Name}" Grid.Row=0/>
<ComoboBox Name="test"
DisplayMemberPath="Country"
SelectedValuePath="Country_ID">
</Grid>
- ¿Cómo cargaré
ItemSource
en esteComboBox
dinámicamente en función de cada elemento seleccionado en elListBox
? Soy nuevo en WPF ... pls ayuda con sus valiosas sugerencias.
Solución
<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>
Ahora su cuadro combinado siempre tiene la misma fuente de elementos que el cuadro de lista principal.
Otros consejos
Una forma de hacer esto es vincular ItemsSource de su ComboBox a la propiedad SelectedValue de ListBox. Para que esto funcione, ListBox debe estar vinculado a una colección de elementos que contenga una lista de elementos a los que se unirá 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"
/>
En este ejemplo, he creado una propiedad pública en el código detrás de la ventana que expone una lista de objetos que contienen la colección Detalles.
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; }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow