silverlight / windows phone 7 selectedIndex проблемы с кнопкой внутри списка - PullRequest
5 голосов
/ 15 ноября 2010

У меня есть список с простым списком предметов. На моей странице xaml у меня есть следующее

<ListBox Name="listBox1">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                    <TextBlock Text="{Binding firstName}"/>
                                    <TextBlock Text="{Binding lastName}"/>
                                    <Button BorderThickness="0" Click="buttonPerson_Click">
                                        <Image Source="delete-icon.png"/>
                                    </Button>
                                </StackPanel>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

В своем коде я пытаюсь захватить selectedIndex, чтобы я мог удалить элемент из коллекции, связанный с моим списком.

private void buttonPerson_Click(object sender, RoutedEventArgs e)
        {

            // If selected index is -1 (no selection) do nothing
            if (listBox1.SelectedIndex == -1)
                return;

            myPersonList.removeAt(listBox1.SelectedIndex);

        }

Однако, независимо от того, в какой строке я нажимаю кнопку удаления, selectedIndex всегда равен -1

что мне не хватает?

спасибо заранее!

Ответы [ 4 ]

6 голосов
/ 15 ноября 2010

Вы можете делать то, что вы хотите, установив свойство Tag для вашего объекта следующим образом:

<Button BorderThickness="0" Click="buttonPerson_Click" Tag="{Binding BindsDirectlyToSource=True}">
     <Image Source="delete-icon.png"/>
</Button>

Затем в обработчике событий вы можете сделать это:

private void buttonPerson_Click(object sender, RoutedEventArgs e)
{
    myPersonList.remove((sender as Button).Tag);
}

Не знаю, как называется ваш объект Person, поэтому я не наложил на него тег, но вам, вероятно, придется это сделать, но, похоже, вам это удобно.


В вашем XAML отсутствует начальный элемент StackPanel? Вероятно, это просто упущение, но оно может вызвать некоторые проблемы, если это ваш настоящий код.

2 голосов
/ 15 ноября 2010

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

 ((IList)myPersonList).Remove(((Button)sender).DataContext);
1 голос
/ 16 августа 2011

Я знаю, что у вас есть ответ, но это еще один способ сделать то, что вы просите. Вы также можете использовать свойство selecteditem

private void buttonPerson_Click(object sender, RoutedEventArgs e)
{

        // Select the item in the listbox that was clicked
        listBox1.SelectedItem = ((Button)sender).DataContext;

        // If selected index is -1 (no selection) do nothing
        if (listBox1.SelectedItem == null)
            return;

        // Cast you bound list datatype.
        myPersonList.remove(([myPersonList Type])listBox1.SelectedValue);

    }
1 голос
/ 15 ноября 2010

Кнопка фиксирует событие касания (щелчка), поэтому элемент никогда не выбирается.

Вместо того, чтобы использовать SelectedIndex, вы должны решить, какой элемент удалить, на основе какой кнопки была нажата. (Сделайте это, посмотрев sender, переданный в обработчик событий.)

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