3 Stimmen

Silverlight: Ereignisse im Datentemplate für Listboxen

Die Funktionalität, die ich möchte, ist eine Schaltfläche zum Entfernen neben jedem Element einer Listbox haben, so dass, wenn der Benutzer darauf klickt, dass bestimmte Element aus der Liste entfernt wird.

Ich denke darüber nach, es in die Datenvorlage zu setzen, aber wie würde ich ein selbst zu diesem verdrahten?

Danke! Shawn Mclean

2voto

bendewey Punkte 38830

Hier ist eine Möglichkeit, dieses Problem anzugehen. Erstellen Sie eine ObservableCollection und setzen Sie ItemsSource gleich mit dieser Collection. Dann kann Ihr Button-Klick-Handler das Element einfach entfernen.

using System;
using System.Collections.ObjectModel;
using System.Windows.Controls;

namespace SilverlightApplication1
{
    public partial class MainPage : UserControl
    {
        private ObservableCollection<string> _customers;

        public MainPage()
        {
            InitializeComponent();

            _customers = new ObservableCollection<string>() { "Bob", "Mark", "Steve" };
            this.DataContext = _customers;
        }

        public void remove_Click(object sender, EventArgs e)
        {
            var button = sender as Button;
            if (button == null)
                return;

            var name = button.DataContext as string;
            if (string.IsNullOrEmpty(name))
                return;

            _customers.Remove(name);
        }
    }
}

In diesem Beispiel würde Ihre XAML wie folgt aussehen:

<Grid x:Name="LayoutRoot">
    <ListBox ItemsSource="{Binding}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal" >
                    <TextBlock Text="{Binding}" />
                    <Button Content="Remove" Click="remove_Click" />
                </StackPanel>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

1voto

bniwredyc Punkte 8399

Binden Sie ItemsSource Ihrer ListBox an ObservableCollection. Fügen Sie eine Lösch-Schaltfläche in die Datenvorlage ein. Click-Event-Handler für die Schaltfläche kann etwas wie dieses sein:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var button = sender as Button;
    if (button != null)
    {
        var yourObject = button.DataContext as YourObject;
        if (yourObject != null)
        {
            YourObjectsObservableCollection.Remove(yourObject); 
        }
    }
}

Sie können also das Objekt, das an ListBoxItem gebunden ist, aus dem DataContext der Schaltfläche abrufen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X