Удалить элементы из ListBox в WPF? - PullRequest
5 голосов
/ 24 мая 2010

Я пытаюсь удалить элементы из списка, привязанного к данным.Вот скриншот, как выглядит список.

альтернативный текст http://i46.tinypic.com/xcnn0n.png

Этот код добавляет элементы в списки.

    public class Task
    {
        public string Taskname { get; set; }

        public Task(string taskname)
        {
            this.Taskname = taskname;
        }
    }

    public void GetTask()
    {
        taskList = new List<Task>
                           {
                               new Task("Task1"),
                               new Task("Task2"),
                               new Task("Task3"),
                               new Task("Task4")
                           };

        lstBxTask.ItemsSource = taskList;
    }

Это код Xaml,

 <ListBox x:Name="lstBxTask" Style="{StaticResource ListBoxItems}" >
        <ListBox.ItemTemplate>                
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Text="{Binding Taskname}"  Style="{StaticResource TextInListBox}"/>
                    <Button Name="btnDelete" Style="{StaticResource DeleteButton}" Click="btnDelete_Click">
                    </Button>                        
                </StackPanel>                    
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

При выборе элемента в списке отображается кнопка удаления (x).При нажатии он должен удалить этот элемент из списка.Может кто-нибудь сказать мне, как я могу это сделать?

Ответы [ 2 ]

11 голосов
/ 24 мая 2010

хорошо, это то, что я сделал.Наблюдаемая коллекция работала как шарм.

private ObservableCollection<Task> taskList;

public void GetTask()
        {
            taskList = new ObservableCollection<Task>
                               {
                                   new Task("Task1"),
                                   new Task("Task2"),
                                   new Task("Task3"),
                                   new Task("Task4")
                               };

            lstBxTask.ItemsSource = taskList;
        }

 private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            var button = sender as Button;
            if (button != null)
            {
                var task = button.DataContext as Task;

                ((ObservableCollection<Task>) lstBxTask.ItemsSource).Remove(task);
            }
            else
            {
                return;
            }
        }
7 голосов
/ 24 мая 2010

Попробуйте использовать ObservableCollection вместо простого List .

ObservableCollection будет уведомлять систему привязки WPF о каждом изменении ее содержимого. Поэтому вам нужно будет только удалить элемент из списка, и пользовательский интерфейс будет обновлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...