2016-07-12 28 views
1

Meine Anforderung ist, dass ich eine Flipview in meiner Anwendung verwenden und Seiten dynamisch hinzufügen. Ich möchte das tun, wenn ich auf Addpages Schaltfläche klicke meine aktuelle Seite aus Flipview entfernen und neue Seite kommt. mein Code für addPageIch möchte ein Element aus Flipview entfernen, wenn der Benutzer die Seiten wechselt. Kann ich irgendetwas tun?

public void Add_Pages_Click(object sender, RoutedEventArgs e) 
    { 
     try 
     { 

      my_canvas = new Canvas(); 
      my_canvas.Name = "Item" + DateTime.Now.ToFileTime().ToString(); 
      //fp1.ItemsSource = fi; 
      fp1.Items.Add(my_canvas); 
      fp1.SelectionChanged += Fp1_SelectionChanged; 
      Stickers1.Visibility = Visibility.Collapsed; 
      Backgrounds1.Visibility = Visibility.Collapsed; 
      Popup_wordart.IsOpen = false; 
      PopUp_Media.IsOpen = false; 
      my_canvas.Visibility = Visibility.Collapsed; 
      Audio_Recorder.IsOpen = false; 
     } 
     catch (Exception ex) 
     { 


     } 
     // Backward_Arrow.Visibility = Visibility.Visible; 
    } 

Antwort

0

Eine sehr convenoent Möglichkeit, diese Arbeit zu tun ist, eine Struktur in den DataTemplate für jedes Element der FlipView zu bauen und aktualisiert nur ObservableCollection verwenden, um hinzuzufügen, zu entfernen, die Elemente der FlipView.

<FlipView x:Name="flipView" ItemsSource="{x:Bind flipviewCollection}"> 
    <FlipView.ItemTemplate> 
     <DataTemplate> 
      <Canvas> 
       <Image Source="{Binding ImageSource}" Stretch="None"/> 
      </Canvas> 
     </DataTemplate> 
    </FlipView.ItemTemplate> 
</FlipView> 

definieren ein Modell für die Daten, die Sie in der DataTemplate binden müssen:

public class ImageSourceClass 
{ 
    public string ImageSource { get; set; } 
} 

Dann im Code hinter Ihrer FlipView, erstellen Sie eine Sammlung dieses Datenmodell und fügen Sie Daten zu dieser Sammlung :

ObservableCollection<ImageSourceClass> flipviewCollection = new ObservableCollection<ImageSourceClass>(); 

protected override void OnNavigatedTo(NavigationEventArgs e) 
{ 
    flipviewCollection.Clear(); 
    flipviewCollection.Add(new ImageSourceClass { ImageSource = "Assets/1.jpg" }); 
    flipviewCollection.Add(new ImageSourceClass { ImageSource = "Assets/2.jpg" }); 
    flipviewCollection.Add(new ImageSourceClass { ImageSource = "Assets/3.jpg" }); 
    flipviewCollection.Add(new ImageSourceClass { ImageSource = "Assets/4.jpg" }); 
    flipviewCollection.Add(new ImageSourceClass { ImageSource = "Assets/5.jpg" }); 
} 

Endlich, wenn Sie ein Element entfernen möchten, und ein neues in der Button-Click-Ereignis hinzu:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    //index = flipView.SelectedIndex + 1 because when remove one item, next item will be shown, 
    //it will behavior like a new item replace the old one. 
    flipviewCollection.Insert(flipView.SelectedIndex + 1, new ImageSourceClass { ImageSource = "Assets/new.jpg" }); 
    flipviewCollection.Remove(flipView.SelectedItem as ImageSourceClass);         
} 

Problem ist, wenn Sie ein FlipView bauen nicht diese Methode verwenden, um, Sie Elemente FlipView manuell nur hinzugefügt, müssen Sie auch manully ein wie gerade hier zum Beispiel in Ihrem Code entfernen:

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    var my_canvas = new Canvas(); 
    var textbox = new TextBox(); 
    my_canvas.Children.Add(textbox); 
    flipView.Items.Insert(flipView.SelectedIndex + 1, my_canvas); 
    flipView.Items.RemoveAt(flipView.SelectedIndex);    
}