2014-10-02 56 views
1

在我的C#windows phone手機應用程序中,我創建了一個綁定來將一個字符串列表綁定到ItemsControl如何在綁定後向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後面的代碼。 – RadioSpace 2014-10-02 17:48:25

+2

也代替'List '使用'System.Collections.ObjectModel.ObservableCollection ''。它會自動更新控件。 – RadioSpace 2014-10-02 17:53:59

回答

3

有兩種回答這個問題:

  1. 使用的ObservableCollection代替List,因爲當項目被添加/刪除它時它會通知用戶界面。然後,您只需將新項目添加到視圖模型中的列表中即可。

  2. 使用CompositeCollection,以便您可以在不修改實際集合的情況下擁有「附加」項目。

通常你會做1,但因爲你希望有一個「點擊添加更多」選項類型,CompositeCollection可能是要走的路。

既然你所提及般的Windows Phone(但標籤WPF),你可能想看看這篇文章怎麼寫自己的CompositeCollection對象:how to do a CompositeCollection in WP8?

+0

謝謝。我嘗試了ObservableCollection()。我私人添加新的項目async無效NavigationHelper_LoadState(對象發件人,LoadStateEventArgs e)()。但是當我在這個頁面之間來回移動時,我看到越來越多的項目被添加到列表中。有沒有更好的地方做到這一點? – hap497 2014-10-02 18:31:32

+0

@ hap497當您加載初始集合時,我會將它添加到視圖模型中。 – BradleyDotNET 2014-10-02 18:37:12

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> 
相關問題