Как динамически установить Itemsource в Comobox внутри DataTemplate?
-
06-07-2019 - |
Вопрос
У меня есть один Listbox
и применил один DataTemplate
вот так
<ListBox>
<ListBox.ItemTemplate>
<Grid>
<TextBlock Text="{Binding Path=Name}" Grid.Row=0/>
<ComoboBox Name="test"
DisplayMemberPath="Country"
SelectedValuePath="Country_ID">
</Grid>
- Как я буду загружаться
ItemSource
к этомуComboBox
динамически на основе каждого элемента, выбранного вListBox
?Я новичок в WPF...пожалуйста, помогите своими ценными предложениями.
Решение
<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>
Теперь ваш combocbox всегда будет иметь тот же itemssource, что и родительский listbox.
Другие советы
Один из способов сделать это - привязать ItemsSource вашего выпадающего списка к свойству SelectedValue списка.Чтобы это сработало, ListBox должен быть привязан к коллекции элементов, содержащей список элементов, к которым будет привязан 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"
/>
В этом примере я создал общедоступное свойство в коде за окном, которое предоставляет список объектов, содержащих коллекцию сведений.
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; }
}
Не связан с StackOverflow