Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
 ListView удаление Item  [new]
Евгений, Екатеринбург
Member

Откуда:
Сообщений: 633
ListView заполняется из коллекции через ItemSource. Пытаюсь по нажатию кнопки удалить один из айтемов
MyCollection.RemoveAt(MyListView.SelectedIndex);

Но, получается что индекс всегда равен -1, как будто выделения нет. Такое ощущение, что при нажатии кнопки происходит потеря фокуса у ListView и выделение теряется.
Как сделать удаление правильно?
24 сен 18, 10:15    [21683601]     Ответить | Цитировать Сообщить модератору
 Re: ListView удаление Item  [new]
Shocker.Pro
Member

Откуда: ->|<- :адуктО
Сообщений: 20286
Возможно, включен мультиселект
24 сен 18, 11:11    [21683667]     Ответить | Цитировать Сообщить модератору
 Re: ListView удаление Item  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 4710
Shocker.Pro
Возможно, включен мультиселект

Судя по коду, имеет место быть обращение из модели к свойствам контрола напрямую, что в WPF обычно не принято. Нужно сделать two-way binding свойства модели, отвечающего за хранение выделененного элемента (или его индекса), и MyListView.SelectedItem/MyListView.SelectedIndex. В модели обращаться именно к свойству - будет вполне видно его значение.
24 сен 18, 12:17    [21683780]     Ответить | Цитировать Сообщить модератору
 Re: ListView удаление Item  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Евгений, Екатеринбург, у Вас это какая-то особенность работы Вашего приложения.
Вот простейший пример.
XAML
<Window x:Name="window" x:Class="SQL_ru__WPF_.ListView_удаление_Item"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:SQL_ru__WPF_"
        mc:Ignorable="d"
        Title="ListView_удаление_Item" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <ListView x:Name="MyListView" ItemsSource="{Binding MyCollection, ElementName=window}" HorizontalAlignment="Center"/>
        <Button Content="Кнопка" Grid.Row="1" VerticalAlignment="Center" HorizontalAlignment="Center" Click="Button_Click"/>

    </Grid>
</Window>
Код XAML.cs
    public partial class ListView_удаление_Item : Window
    {
        public ListView_удаление_Item()
        {
            InitializeComponent();
        }

        public ObservableCollection<String> MyCollection { get; set; } = new ObservableCollection<string>()
        {   "Январь", "Февраль", "Март",
            "Апрель", "Май", "Июнь",
            "Июль", "Август", "Сентябрь",
            "Октябрь", "Ноябрь", "Декабрь"};

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (MyListView.SelectedIndex >= 0)
                MyCollection.RemoveAt(MyListView.SelectedIndex);
        }

    }

В нём всё работает без проблем.
24 сен 18, 12:42    [21683820]     Ответить | Цитировать Сообщить модератору
 Re: ListView удаление Item  [new]
Евгений, Екатеринбург
Member

Откуда:
Сообщений: 633
Eld Hasp
Евгений, Екатеринбург, у Вас это какая-то особенность работы Вашего приложения.

да, похоже это у меня что-то не то с коллекцией. Буду разбираться. Спасибо за пример.
24 сен 18, 13:53    [21683969]     Ответить | Цитировать Сообщить модератору
 Re: ListView удаление Item  [new]
Roman Mejtes
Member

Откуда: г. Пермь
Сообщений: 3305
SelectedIndex вообще вроде как не отражает реальный индекс элемента в ListBox, ведь вы могли применить сортировку, я могу ошибаться, но это вроде индекс элемент в представлении коллекции, а не коллекции источника. По этому подобный финд делать вообще не стоит, но я могу ошибаться, поправьте, если не прав.
24 сен 18, 14:54    [21684130]     Ответить | Цитировать Сообщить модератору
 Re: ListView удаление Item  [new]
Eld Hasp
Member

Откуда:
Сообщений: 225
Roman Mejtes, Вы правы. Но это в автором темы не уточнялось - так что, наверное, он сам с этим разбирается или ему этого достаточно.
24 сен 18, 15:01    [21684151]     Ответить | Цитировать Сообщить модератору
 Re: ListView удаление Item  [new]
Евгений, Екатеринбург
Member

Откуда:
Сообщений: 633
Всем спасибо, разобрался - действительно в другом месте исключение возникало - в SelectionChanged навигация по другому списку была и когда при удалении выделение снималось, то возникало исключение за выход диапазона.
24 сен 18, 16:03    [21684269]     Ответить | Цитировать Сообщить модератору
Все форумы / WPF, Silverlight Ответить