2017-10-24 3 views
0

Ich habe ein ListBox, die ein ContentMenu enthält wie folgt:Wie ersetzt man Artikel in einer Listbox?

<ListBox x:Name="lb_Configuration" SelectionMode="Single" SelectionChanged="lb_Configuration_SelectionChanged" ItemsSource="{Binding Products}" SelectedItem="{Binding SelectedProduct}" > 
    <ListBox.ContextMenu> 
      <ContextMenu> 
       <MenuItem Header="Delete" Click="MenuItemDelete_Click"/> 
       <MenuItem Header="Replace" Click="MenuItemReplace_Click"/> 
       <MenuItem Header="Insert" Click="MenuItemInsert_Click"/> 
      </ContextMenu> 
    </ListBox.ContextMenu>              
</ListBox> 

Als ich Delete wollen das Element in der ListBox: die SelectedItem ersetzen

private void MenuItemDelete_Click(object sender, RoutedEventArgs e) 
{ 
    Product itemToDelete = lb_Configuration.SelectedItem as Product; 
    if (lb_Configuration.SelectedIndex < 0) return; 
    else 
    { 
     lb_Configuration.Items.RemoveAt(lb_Configuration.SelectedIndex); 
    } 

} 

Nun das Problem ist, ich möchte auch in die Listbox, also gehe ich davon aus, dass ich auch eine ContextMenu popup und die ItemsSource daran binden soll? Wie soll ich das machen? Danke im Voraus!

+0

Ersetzen Sie das ausgewählte Element mit dem, was? – mm8

Antwort

0

Sie sollten in der Lage sein, den alten Eintrag genauso zu löschen, wie Sie es in der Löschmethode getan haben. Verwenden Sie dann einfach Items.InsertAt(Int32, Object), um ein Element in denselben Index einzufügen.

Zum Beispiel

private void MenuItemReplace_Click(object sender, RoutedEventArgs e) 
{ 
    Product replacementProduct = new Product(); 
    // Grab the old index 
    int index = lb_Configuration.SelectedIndex; 
    // Do any product setup configuration here 

    if (index < 0) return; 
    else 
    { 
     // Remove, insert, and refresh the ListBox 
     lb_Configuration.Items.RemoveAt(index); 
     lb_Configuration.Items.InsertAt(index, replacementProduct); 
     lb_Configuration.RefreshItems(); 
    } 
} 

Wenn Sie weitere Informationen zu ListBox.Items.InsertAt() sehen wollen

+0

Danke für Ihre Wiederholung. Aber was ich wissen möchte ist, wie man das Objekt des 'MenuItem' bekommt. – Winston