Silverlight: события в таблице данных для списков - PullRequest
3 голосов
/ 24 декабря 2009

Функциональность, которую я хочу, - это иметь кнопку удаления рядом с каждым элементом списка, чтобы при щелчке пользователя этот конкретный элемент удалялся из списка.

Я подумываю о том, чтобы поместить его в шаблон данных, но как мне подключить его к этому?

Спасибо, Шон Маклин

Ответы [ 2 ]

2 голосов
/ 24 декабря 2009

Вот один из способов решения этой проблемы. Создайте ObservableCollection и установите для вас ItemsSource равным этой коллекции Тогда ваш обработчик нажатия кнопки может просто удалить элемент.

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);
        }
    }
}

В этом примере ваш XAML будет выглядеть так:

<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>
1 голос
/ 24 декабря 2009

Свяжите ItemsSource вашего ListBox с ObservableCollection. Поместите кнопку удаления в шаблон данных. Обработчик события нажатия для кнопки может выглядеть примерно так:

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); 
        }
    }
}

Таким образом, вы можете получить объект, связанный с ListBoxItem, с помощью кнопок DataContext.

...