【问题标题】:How to add more items to ItemsControl after binding绑定后如何向 ItemsControl 添加更多项目
【发布时间】:2014-10-02 17:45:55
【问题描述】:

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

// MyCollections is a List<string>

<ItemsControl x:Name="ContentRoot" ItemsSource="{Binding MyCollections}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <TextBox Text="{Binding }" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

它有效。但我的问题是如何在绑定后将我自己的项目(例如“单击以添加更多”)添加到此 ItemsControl

【问题讨论】:

  • 在后面的代码中添加到 MyCollections。
  • 也可以用System.Collections.ObjectModel.ObservableCollection&lt;string&gt; 代替List&lt;string&gt;。它会自动更新控件。

标签: c# wpf


【解决方案1】:

这个问题有两个答案:

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

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

通常你会做 1,但由于你想要“点击添加更多”类型的选项,CompositeCollection 可能是要走的路。

由于您提到了 windows phone(但标记为 WPF),您可能想查看这篇文章,了解如何编写自己的 CompositeCollection 对象:how to do a CompositeCollection in WP8?

【讨论】:

  • 谢谢。我尝试了 ObservableCollection()。我在私有 async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)() 中添加了新项目。但是当我在这个页面之间来回切换时,我看到越来越多的项目被添加到列表中。有更好的地方吗?
  • @hap497 当您加载初始集合时,我会将其添加到视图模型中。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    相关资源
    最近更新 更多