Как добавить больше элементов в ItemsControl после привязки

1

В моем приложении 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 после его привязки?

  • 0
    добавить в MyCollections в коде позади.
  • 2
    также вместо List<string> используйте System.Collections.ObjectModel.ObservableCollection<string> . это обновит контроль автоматически.
Теги:
wpf

2 ответа

3
Лучший ответ

На этот вопрос два ответа:

  1. Используйте ObservableCollection вместо List, так как он уведомит пользовательский интерфейс, когда элементы будут добавлены/удалены из него. Затем вы просто добавляете свой новый элемент в список в модели представления.

  2. Используйте CompositeCollection чтобы вы могли иметь "дополнительный" элемент без изменения фактической коллекции.

Обычно вы делали бы 1, но поскольку вы хотите использовать тип "Нажмите, чтобы добавить больше", CompositeCollection, вероятно, подходит.

Поскольку вы упомянули Windows-телефон (но отметили WPF), вы можете захотеть посмотреть на это сообщение, как написать свой собственный объект CompositeCollection: как сделать CompositeCollection в WP8?

  • 0
    Благодарю. Я попробовал ObservableCollection (). Я добавляю новый элемент к нему в частном асинхронном void NavigationHelper_LoadState (отправитель объекта, LoadStateEventArgs e) (). Но когда я перехожу назад и вперед между этой страницей, я вижу все больше и больше элементов, добавляемых в список. Есть ли лучшее место для этого?
  • 0
    @ hap497 Я бы добавил его в модель представления при загрузке исходной коллекции.
1

Используйте 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>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню