Как получить индекс нажатой кнопки в списке - PullRequest
4 голосов
/ 20 сентября 2011

У меня есть окно со списком, в каждом из которых есть кнопка удаления, поэтому, когда я нажимал кнопку удаления, мне нужен индекс поля со щелчком, чтобы удалить строку. Как я могу получить индекс элемента, по которому щелкнули?

вот мой список

 <ListBox  HorizontalAlignment="Left" Name="listBox1" Margin="-3,132,0,0" VerticalAlignment="Top" Width="498" SelectionChanged="listBox1_SelectionChanged">

            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Border BorderThickness="0,1,0,0" BorderBrush="#FFC1BCBC" Width="490">
                        <Grid Height="70">
                            <Image Height="50" 
                           HorizontalAlignment="Left" 
                           Name="image" 
                           Stretch="Fill" 
                           VerticalAlignment="Top" 
                           Width="50" 
                           Source="{Binding iconPath}" Margin="8,8,0,0" />
                            <TextBlock Name="Name" Text="{Binding displayName}" VerticalAlignment="Center" Margin="60,0,0,0" Foreground="Black" FontWeight="SemiBold"></TextBlock>

                            <Button Name="btnDeleteRow" Width="50" Click="btnDeleteDashboard_Click" Margin="390,0,0,0" BorderBrush="Transparent" Style="{StaticResource logoutbtn_style}">

                            </Button>
                        </Grid>
                    </Border>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Ответы [ 3 ]

5 голосов
/ 20 сентября 2011

Я полагаю, ваш ListBox связан с какой-либо исходной коллекцией?В этом случае DataContext вашей кнопки будет экземпляром одного из ваших связанных элементов.Затем вы можете сделать следующее:

// если, например, вы связываете список экземпляров MyDataObject ...

// create a list
List<MyDataObject> myDataObjects = CreateTestData();

// bind it
listBox1.ItemSource = myDataObjects;

...

// in your click handler
private void btnDeleteDashboard_Click(object sender, EventArgs args)
{
  // cast the sender to a button
  Button button = sender as Button;

  // find the item that is the datacontext for this button
  MyDataObject dataObject = button.DataContent as MyDataObject;

  // get the index
  int index = myDataObjects.IndexOf(dataObject);
}
3 голосов
/ 20 сентября 2011

Лучшим вариантом является привязка базы данных списка к коллекции List или ObservableObject, а также двусторонняя привязка данных к «SelectedItem» или «SelectedIndex» (я предпочитаю selecteditem) к свойству.

Затем по нажатию кнопки вы можете просто вызвать collection.Remove (selecteditemproperty).

Если вы используете MVVM или iPropertyNotified, то представление автоматически обновит список при изменении внутренней коллекции.

Дайте мне знать, если вам нужен более подробный пример для этого. но в основном:

    public ObservableCollection<ItemViewModel> _items;
    /// <summary>
    /// A collection for ItemViewModel objects.
    /// </summary>
    public ObservableCollection<ItemViewModel> Items
    {
        get
        {
            return _items;
        }
        set
        {
            if (value != _items)
            {
                _items = value;
                NotifyPropertyChanged("Items");
            }
        }
    }

    private ItemViewModel _listBoxSelectedItem;
    /// <summary>
    /// Sample ViewModel property; this property is used in the view to display its value using a Binding
    /// </summary>
    /// <returns></returns>
    public ItemViewModel ListBoxSelectedItem
    {
        get
        {
            return _listBoxSelectedItem;
        }
        set
        {
            if (value != _listBoxSelectedItem)
            {
                _listBoxSelectedItem = value;
                NotifyPropertyChanged("ListBoxSelectedItem");
            }
        }
    }

Затем привяжите список так:

 ItemsSource="{Binding Items}" SelectedItem="{Binding ListBoxSelectedItem, Mode=TwoWay}" 

Затем просто обратитесь к этим значениям, как описано

Надеюсь, это поможет

2 голосов
/ 20 сентября 2011

«когда я нажимал кнопку удаления, мне нужен индекс, по которому щелкнули», поскольку в каждой строке есть кнопка удаления, вы должны назначить индекс свойству «Tag» каждой кнопки удаления, поэтому при каждом нажатии кнопки удаления вы получаетеиндекс соответствующего элемента списка.

извините, я только что увидел ваш wp-тег и ваш код xaml, поэтому мой ответ может быть неправильным.

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