0

Dies wird, wie sieht mein listbox:WP7 - einige Elemente in listbox nach Button-Klick zeigen Zeige mehr Artikel

<ListBox x:Name="ForthListBox" 
      Margin="0,0,-12,0" 
      ItemsSource="{Binding Tops}" 
      Tap="ForthListBox_Tap" Style="{StaticResource TopListBoxStyle}"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Margin="0,0,0,17"> 
         <TextBlock Text="{Binding Title}" 
           TextWrapping="Wrap" 
           Margin="12,0,0,0" 
           FontSize="40"/> 
        <TextBlock Text="{Binding Rating}" 
           TextWrapping="NoWrap" 
           Margin="12,-6,0,0" 
           Style="{StaticResource PhoneTextSubtleStyle}"/> 
        </StackPanel> 
       </DataTemplate> 
     </ListBox.ItemTemplate> 
</ListBox> 

Ich bearbeitete Vorlage für listbox so habe ich Button am Ende:

<Style x:Key="TopListBoxStyle" TargetType="ListBox"> 
     <Setter Property="Background" Value="Transparent"/> 
     <Setter Property="Foreground" Value="{StaticResource PhoneForegroundBrush}"/> 
     <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Disabled"/> 
     <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
     <Setter Property="BorderThickness" Value="0"/> 
     <Setter Property="BorderBrush" Value="Transparent"/> 
     <Setter Property="Padding" Value="0"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="ListBox"> 
        <ScrollViewer x:Name="ScrollViewer" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Foreground="{TemplateBinding Foreground}" Padding="{TemplateBinding Padding}"> 
         <StackPanel><ItemsPresenter/> 
          <Button x:Name="BtnLoadMore" Click="BtnLoadMore_Click" Content="Další" /> 
         </StackPanel> 
        </ScrollViewer> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Und ich habe ObservableCollection<Top>() in MainViewModel, die ich an DataContext binden. Es ist in Ordnung und es zeigt meine Artikel, aber wie kann ich einstellen, dass ich nur 50 Artikel in dieser Listbox anzeigen möchte und nachdem ich auf den Button geklickt habe, möchte ich die ersten 50 Artikel und 50 Artikel mehr aus der Sammlung und immer wieder und wieder zeigen wo es keine weiteren Elemente in der Sammlung gibt, die nicht angezeigt werden, dann verberge die Schaltfläche. Danke

+0

Ich habe versucht verbergen, dass ich zwei Sammlungen für diese haben würde. Eine, die zum Binden verwendet wird, und ich füge nur Elemente hinzu, die ich zeigen möchte, und zweite, die alle Elemente haben und aus denen ich Elemente bekomme, wenn ich auf den Knopf klicke, aber ich denke, dass diese Lösung nicht die beste ist. Ich hoffe, es gibt eine Option in {Binding} –

Antwort

0

Sie könnten eine Variable in Ihrem ViewModel haben, die verfolgt, wie oft die Schaltfläche geklickt wird. In Ihrem Getter für die ObservableCollection können Sie LINQ und den Take-Operator verwenden. Etwas wie folgt aus:

public class MainPageViewModel : INotifyPropertyChanged { 
     private ObservableCollection<string> _myList; 
     private int _clickCount; 
     private const int ItemsPerPage = 25; 

     public MainPageViewModel() { 
      _myList = new ObservableCollection<string>(); 
      _clickCount = 1; 
      PopulateList(); 
     } 

     private void PopulateList() { 
      for (int i = 0; i < 100; i++) { 
       _myList.Add(string.Format("item {0}", i)); 
      } 
     } 

     public ObservableCollection<string> TheList { 
      get { return new ObservableCollection<string>(_myList.Take(_clickCount * ItemsPerPage).ToList()); } 
     } 

     public void IncrementClickCount() { 
      if (_clickCount * ItemsPerPage < _myList.Count) { 
       _clickCount += 1; 
       RaisePropertyChanged("TheList"); 
      } 
     } 

     protected void RaisePropertyChanged(string property) { 
      if(PropertyChanged != null) 
       PropertyChanged(this, new PropertyChangedEventArgs(property)); 
     } 
     public event PropertyChangedEventHandler PropertyChanged; 
    } 

Und dann in MainPage.xaml.cs

public partial class MainPage : PhoneApplicationPage { 
     private MainPageViewModel _vm; 
     // Constructor 
     public MainPage() 
     { 
      InitializeComponent(); 
      Loaded += (s, e) => { 
          _vm = new MainPageViewModel(); 
          DataContext = _vm; 
         }; 
     } 

     private void button1_Click(object sender, RoutedEventArgs e) 
     { 
      _vm.IncrementClickCount(); 
     } 
    } 

Und binden Sie einfach Ihre List-Box an den Immobilien genannt theList

Hoffnung, die

2

konnte die Schaltfläche folgenden Code

private void BtnLoadMore_Click(object sender, RoutedEventArgs e) 
{ 
    AddMoreItems(); 
    Button b = sender as Button; 
    b.Visibility = System.Windows.Visibility.Collapsed; 
}