2017-04-27 3 views
0

ich ein Listview habe und dafür ItemsSource ist Ich habe CollectionOfCapturedImages (ein ObservableCollection), ein ein Button zum Löschen ausgewählter Elemente (BitmapImage) gesetzt von Listview und auch von ObservableCollection und ein Label in Meine MainWindow Anzeige der Anzahl der aufgenommenen Bilder.WPF - ausgewähltes Element löscht (Bitmap) von Listview

private void addNewImageButton_Click(object sender, RoutedEventArgs e) 
{ 
    CameraWindow cWindow = Application.Current.Windows.OfType<CameraWindow>().FirstOrDefault(); 
    RoutedEventArgs newEventArgs = new RoutedEventArgs(Button.ClickEvent); 
    cWindow.manualCapture.RaiseEvent(newEventArgs); 
    // ListView.ScrollIntoView(ListView.Items.Count - 1); 
} 

public ObservableCollection<BitmapImage> CollectionOfCapturedImages { get; } = new ObservableCollection<BitmapImage>(); 


<ListView x:Name="ListView" ItemsSource="{Binding CollectionOfCapturedImages}" Height="345" Margin="567,10,10,0" VerticalAlignment="Top"> 
    <ListView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <UniformGrid Columns="1" HorizontalAlignment="Center" VerticalAlignment="Top"/> 
     </ItemsPanelTemplate> 
    </ListView.ItemsPanel> 
    <ListView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Vertical"> 
       <Image Source="{Binding}" Height="150" Width="150"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListView.ItemTemplate> 
</ListView> 

das ist, wie ich meine Label in MainWindow aktualisieren. Wenn ich Bilder aufnehme, gibt es kein Problem, Label Inhalt wird aktualisiert.

public Action<int> amountOfCapturedImages; 

this.cameraWindow = new CameraWindow(this); 
cameraWindow.amountOfCapturedImages += (int count) => { 
    MwAmountOfImagesLabel.Content = count; 
}; 

und hier ist meine Schaltfläche Löschen

<Button x:Name="DeleteSelectedImageButton" Click="DeleteSelectedImageButton_Click" Content="Delete Selected Image" HorizontalAlignment="Left" Margin="567,488,0,0" Height="26" VerticalAlignment="Top" Width="145"/> 

und auf diese Weise ich BitmapImage s von Listview

private void DeleteSelectedImageButton_Click(object sender, RoutedEventArgs e) 
{ 
    CollectionOfCapturedImages.Remove((BitmapImage)ListView.SelectedItem); 
} 

aber mein Label ‚s Inhalt bin Löschen nicht aktualisiert wird, wenn ich Lösche ein Bild von Listview. Wie kann ich meinen Inhalt Label korrekt aktualisieren?

Antwort

0

Sie müssen sie aus dem CollectionOfCapturedImages entfernen und binden MwAmountOfImagesLabel => CollectionOfCapturedImages.Count

+0

Danke für die Antwort! 'MainWindows Etikett wird aktualisiert, wenn ich Bilder lösche, aber wenn ich ein neues Bild aufnehme, fügt das Label von MainWindow weiterhin Bilder in diesem Fall von 5. hinzu. –

+0

Überprüfen Sie den Zählwert Ihrer Sammlung, wenn Sie neue Bilder erfassen ... machen Sie ein klar auf die Sammlung? Oder wenn Sie eine neue Sammlung erstellen, müssen Sie die GUI über die Änderung benachrichtigen. – GCamel

+0

Ich möchte das ausgewählte Element aus listview (CollectionOfCapturedImages) entfernen und den Inhalt der Beschriftung aktualisieren, nachdem ich auf die Schaltfläche zum Löschen geklickt habe. Ich erstelle keine neue Sammlung. –

0

dieses Codes Befreien Sie:

cameraWindow.amountOfCapturedImages += (int count) => { 
    MwAmountOfImagesLabel.Content = count; 
}; 

... und einfach binden die Content Eigenschaft des Label der Count Eigenschaft des ObservableCollection:

<Label Content="{Binding CollectionOfCapturedImages.Count}" /> 

Sie sollten nicht setzen Sie die Content Eigenschaft der Label programmgesteuert irgendwo in Ihrem Code. Richten Sie einfach die Bindung in Ihrem XAML-Markup ein.