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

C# 如何在绑定后向ItemsControl添加更多项,c#,wpf,C#,Wpf,在我的C windows phone应用程序中,我创建了一个绑定,将字符串列表绑定到ItemsControl 它起作用了。但我的问题是,如何在绑定后将自己的项目(例如“单击以添加更多”)添加到此项目控件?此问题有两个答案: 使用ObservableCollection而不是List,因为它会在添加/删除项时通知UI。然后,只需将新项添加到视图模型中的列表中 使用CompositeCollection,这样您就可以在不修改实际集合的情况下拥有附加项 通常情况下,您会选择1,但由于您希望单击以添加更

在我的C windows phone应用程序中,我创建了一个绑定,将字符串列表绑定到ItemsControl


它起作用了。但我的问题是,如何在绑定后将自己的项目(例如“单击以添加更多”)添加到此项目控件?

此问题有两个答案:

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

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

通常情况下,您会选择1,但由于您希望单击以添加更多类型的选项,因此CompositeCollection可能是一种选择


由于您遇到了windows phone,但标记了WPF,因此您可能想看看这篇文章,了解如何编写自己的CompositeCollection对象:

这个问题有两个答案:

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

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

通常情况下,您会选择1,但由于您希望单击以添加更多类型的选项,因此CompositeCollection可能是一种选择

由于您使用了windows phone,但标记了WPF,因此您可能想看看这篇文章,了解如何编写自己的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>
使用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>

在代码隐藏中添加到MyCollections。也可以使用System.Collections.ObjectModel.ObservableCollection而不是List。它将自动更新控件。在代码隐藏中添加到MyCollections。也可以使用System.Collections.ObjectModel.ObservableCollection代替列表。它将自动更新控件。谢谢。我尝试了可观察的收集。我在private async void NavigationHelper\u LoadStateobject发送者LoadStateEventArgs e中将新项添加到它。但是当我在这个页面之间来回移动时,我看到越来越多的项目被添加到列表中。有更好的地方吗?@hap497我会在加载初始集合时将其添加到视图模型中。谢谢。我尝试了可观察的收集。我在private async void NavigationHelper\u LoadStateobject发送者LoadStateEventArgs e中将新项添加到它。但是当我在这个页面之间来回移动时,我看到越来越多的项目被添加到列表中。有更好的地方吗?@hap497我会在加载初始集合时将其添加到视图模型中。