В моем приложении Windows Phone для Windows я создаю привязку для привязки списка строк к ItemsControl
.
// MyCollections is a List<string>
<ItemsControl x:Name="ContentRoot" ItemsSource="{Binding MyCollections}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBox Text="{Binding }" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Оно работает. Но мой вопрос заключается в том, как я могу добавить свой собственный элемент (например, "Нажмите, чтобы добавить больше") в этот ItemsControl
после его привязки?
На этот вопрос два ответа:
Используйте ObservableCollection
вместо List
, так как он уведомит пользовательский интерфейс, когда элементы будут добавлены/удалены из него. Затем вы просто добавляете свой новый элемент в список в модели представления.
Используйте CompositeCollection
чтобы вы могли иметь "дополнительный" элемент без изменения фактической коллекции.
Обычно вы делали бы 1, но поскольку вы хотите использовать тип "Нажмите, чтобы добавить больше", CompositeCollection
, вероятно, подходит.
Поскольку вы упомянули Windows-телефон (но отметили WPF), вы можете захотеть посмотреть на это сообщение, как написать свой собственный объект CompositeCollection
: как сделать CompositeCollection в WP8?
Используйте CompositeCollection
для добавления дополнительных элементов в ваш XAML. Это должно работать:
<StackPanel x:Name="stackPanel">
<StackPanel.Resources>
<CompositeCollection x:Key="myCollection">
<CollectionContainer Collection="{Binding DataContext.MyCollections,
Source={x:Reference stackPanel}}"/>
<ContentControl Content="Click to add more"/>
</CompositeCollection>
</StackPanel.Resources>
<ItemsControl x:Name="ContentRoot"
ItemsSource="{StaticResource myCollection}"/>
</StackPanel>
List<string>
используйтеSystem.Collections.ObjectModel.ObservableCollection<string>
. это обновит контроль автоматически.