如何在绑定后向ItemsControl添加更多项

本文关键字:添加 ItemsControl 绑定 | 更新日期: 2023-09-27 18:25:26

在我的C#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

如何在绑定后向ItemsControl添加更多项

这个问题有两个答案:

  1. 使用ObservableCollection而不是List,因为它会在添加/删除项目时通知UI。然后您只需将新项目添加到视图模型中的列表中。

  2. 使用CompositeCollection,这样您就可以在不修改实际集合的情况下拥有"附加"项目。

通常你会做1,但由于你想要一个"点击添加更多"类型的选项,CompositeCollection可能是最好的选择。

既然你使用了windowsphone(但标记了WPF),你可能想看看这篇文章,了解如何编写自己的CompositeCollection对象:如何在WP8中进行CompositeCollection?

使用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>