Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
35 / 34 / 11
Регистрация: 23.09.2012
Сообщений: 112
1

Отладка работы ListView SelectedItems

17.01.2018, 21:59. Показов 1682. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В проекте есть ListView, при загрузке из базы данных устанавливается IsSelected разным элементам (Items). Так все работает, но когда стал тестировать, окозалось что:
ПОСЛЕ ЗАПУСКА ПРОГРАММЫ и при выбранном (из базы данных) хотябы одном елементе, если пользователь попытается этому елементу отменить выбор (Click, deselect...)
НЕ СРАБАТЫВАЕТ COMMAND (KmdStoA) SelectedItems. Если перед этим выбрать любой другой, комманда срабатывает, но в параметры не передается из базы данных выбранный
элемент. Но когда нужно отменить выбранный из базы данных елемент комманда не срабатывает, визуально отмена выбора отображается.
Если повторно его выбрать - опять все срабатывает. Если повторно (не выходя из программы) загрузить из базы данных состояние ListView, тогда все работает как надо
(комманда срабатывает всегда). Студия не сообщает об ошибке, BackgroundWorker не использую. Все идеи кончились.
Вложения
Тип файла: zip Question_ListView.zip (301.2 Кб, 2 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.01.2018, 21:59
Ответы с готовыми решениями:

Привязка к ListBox SelectedItems
Есть простой ListBox с мультиселектом: ListBox SelectionMode="Multiple"...

Правильное отображение selectedItems в Combobox
Всем привет, работаю по MVVM Есть Объект - Object Два свойства - Value1, Value2 -> string Во...

Как выбрать обьект из ListView.SelectedItems
Приветствую всех! Тут такое дело.Делаю я программу.Выглядит она вот так: Мне нужно удалить...

Набор и отладка программы работы с символами
Написать и отладить программу, которая печатает латинский алфавит в виде .............. A ...

2
Жуткая тВарЬ
393 / 328 / 135
Регистрация: 06.02.2015
Сообщений: 962
Записей в блоге: 1
18.01.2018, 10:00 2
Лучший ответ Сообщение было отмечено iecava как решение

Решение

Не по теме:


Отвратительный код - по хорошему его надо выкинуть и переписать с нуля. Подход не жизнеспособный, мультивыбор элементов можно сделать десятком разных способов и явно тот, что в примере не из их числа, тем более если данные из БД значит они, скорее всего относятся к бизнес логике...



Добавлено через 44 минуты
Скука творит чудеса:
CSharp

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
    using System.Linq;
    using System.Windows.Data;
    using System.ComponentModel;
    using System.Collections.ObjectModel;
    public class Item : INotifyPropertyChanged
    {
        bool isSelected;
        public string Name { get; set; }
        public bool IsSelected
        {
            get { return isSelected; }
            set { isSelected = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsSelected))); }
        }
 
        public event PropertyChangedEventHandler PropertyChanged;
    }
 
    public class ViewModel
    {
        public ObservableCollection<Item> Items { get; set; }
        public ListCollectionView SelectedItems { get; set; }
        public ViewModel()
        {
            Items = new ObservableCollection<Item>();
            SelectedItems = new ListCollectionView(Items);
            SelectedItems.Filter += x => ((Item)x).IsSelected;
            SelectedItems.IsLiveFiltering = true;
            SelectedItems.LiveFilteringProperties.Add(nameof(Item.IsSelected));
 
            LoadItems();
        }
 
        private void LoadItems()
        {
            var range = Enumerable.Range(1, 15).Select(x => new Item { Name = $"{x}", IsSelected = x % 3 == 0 });
            foreach (var item in range)
            {
                item.PropertyChanged += Item_PropertyChanged;
                Items.Add(item);
            }
        }
        private void Item_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            if (e.PropertyName == nameof(Item.IsSelected))
            {
                //любое действие которое требуется при изменении выбранных элементов
            }
        }
    }

Xaml

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<Window x:Class="Question_ListView.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:viewmodels="clr-namespace:Question_ListView.ViewModels"
        Title="MainWindow" Height="350" Width="525">
    <Window.DataContext>
        <viewmodels:ViewModel/>
    </Window.DataContext>
    <StackPanel>
        <ItemsControl ItemsSource="{Binding SelectedItems}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" IsItemsHost="True"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}" Padding="3"/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
        <ItemsControl ItemsSource="{Binding Items}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <StackPanel Orientation="Horizontal" IsItemsHost="True"/>
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <ToggleButton IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged}">
                        <TextBlock Text="{Binding Name}" Padding="3"/>
                    </ToggleButton>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </StackPanel>
</Window>
1
35 / 34 / 11
Регистрация: 23.09.2012
Сообщений: 112
29.01.2018, 19:24  [ТС] 3
amarf Огромное спасибо за дельный совет. Врезультате могу показать (можэт кому пригодится) что получилось.
Вложения
Тип файла: zip Question_ListView.zip (305.3 Кб, 17 просмотров)
0
29.01.2018, 19:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.01.2018, 19:24
Помогаю со студенческими работами здесь

SelectedItems() в QListWidget
Проблемы с выделенными(выбранными) объектами в QListWidget Не могу понять, почему если я ничего...

Отладка работы функции ReadFile для обработки bmp изображений
Господа, пишу программу для обработки bmp изображений. Столкнулся с проблемой, что при вызове...

Пытаюсь разобраться с SelectedItems, но не получается!
Доброго времени суток, форумчане! В чём суть: Пишу диплом, нужно отловить из listBox-а все (т.е....

Нужен пример работы с ListView в VirtualMode
Здравствуйте. Покажите неразумному пример работы с listView'ом в VirtualMod'e. Наполнение будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru