Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 3
1
.NET 4.x

Сделать выделение строки в listbox при нажатии на checkbox

30.10.2016, 14:50. Просмотров 1598. Ответов 5
Метки нет (Все метки)

Есть listbox, в нём содержатся chechbox-ы. Нужно чтобы при нажатии на них, вместе с checkbox-ами выделялись строки в которых они содержатся и наоборот. Сейчас выделяются либо строки, либо ставятся галки в checkbox-ы.

Код Xaml:
XML
1
2
3
4
5
6
7
        <ListBox ItemsSource="{Binding Customers}" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <CheckBox IsChecked="{Binding IsChecked}" Content="{Binding Path=Item.Name}" /> 
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
Код c#
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Windows;
 
namespace Jarloo
{
    public class CheckedListItem<T> : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
 
        private bool isChecked;
        private T item;
 
        public CheckedListItem()
        { }
 
        public CheckedListItem(T item, bool isChecked = false)
        {
            this.item = item;
            this.isChecked = isChecked;
        }
 
        public T Item
        {
            get { return item; }
            set
            {
                item = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("Item"));
            }
        }
 
 
        public bool IsChecked
        {
            get { return isChecked; }
            set
            {
                isChecked = value;
                if (PropertyChanged != null) PropertyChanged(this, new PropertyChangedEventArgs("IsChecked"));
            }
        }
    }
 
    public class Customer
    {
        public string Name { get; set; }
    }
 
    public partial class MainWindow : Window
    {
        public ObservableCollection<CheckedListItem<Customer>> Customers { get; set; }
 
        public MainWindow()
        {
            InitializeComponent();
 
            Customers = new ObservableCollection<CheckedListItem<Customer>>();
 
            Customers.Add(new CheckedListItem<Customer>(new Customer() { Name = "Kelly Smith" }));
            Customers.Add(new CheckedListItem<Customer>(new Customer() { Name = "Joe Brown" }));
            Customers.Add(new CheckedListItem<Customer>(new Customer() { Name = "Herb Dean" }));
            Customers.Add(new CheckedListItem<Customer>(new Customer() { Name = "John Paul" }));
 
            DataContext = this;
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.10.2016, 14:50
Ответы с готовыми решениями:

Как сделать так, чтобы при нажатии определенной строки в listbox скрывалась определенная label?
Здравствуйте. Как сделать так, чтобы при нажатии определенной строки в listbox скрывалась...

Отрисовка ListBox: при нажатии на элемент не происходит выделение
почему при нажатии на элемент ListBox'a не происходит выделение? procedure...

ListBox: снять выделение с элемента при повторном нажатии на него
Подскажите как можно снять выделение с ListBox, если я нажимаю на этот же индекс?

[WPF] Как сделать выделение строки цветом в listBox?
У меня выводится список подозрительных файлов в list.box. Допустим там есть расширение файла amc....

5
3 / 3 / 4
Регистрация: 29.10.2016
Сообщений: 47
30.10.2016, 17:19 2
MrBlack12,
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
<Window.Resources>
    <Style TargetType="ListBoxItem">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="ListBoxItem">
                    <StackPanel Orientation="Horizontal" Margin="2">
                        <CheckBox IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListBoxItem}}, Path=IsSelected}"/>
                        <Border Name="Border">
                            <ContentPresenter Content="{TemplateBinding Content}" />
                        </Border>
                    </StackPanel>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsSelected" Value="true">
                            <Setter TargetName="Border" Property="Background" Value="Blue"/>
                            <Setter Property="Foreground" Value="White"/>
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<ListBox >
    <ListBoxItem>ddddd</ListBoxItem>
    <ListBoxItem>ddddd</ListBoxItem>
    <ListBoxItem>ddddd</ListBoxItem>
    <ListBoxItem>ddddd</ListBoxItem>
    <ListBoxItem>ddddd</ListBoxItem>
    <ListBoxItem>ddddd</ListBoxItem>
    <ListBoxItem>ddddd</ListBoxItem>
</ListBox>
0
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 3
30.10.2016, 21:17  [ТС] 3
Добавлено через 31 минуту
subud, Спасибо, но появилось требование хранить в классе Customer несколько полей, например Name и Id, а выводить на экран только Name. Как это сделать? У меня не получается, выводит только WpfApplication.MainWindow+Customer
0
3 / 3 / 4
Регистрация: 29.10.2016
Сообщений: 47
30.10.2016, 23:43 4
Лучший ответ Сообщение было отмечено MrBlack12 как решение

Решение

MrBlack12, посомтрите данное видео, там рассмотрен пример, по сути один в один как у вас, только названия заменить переменных и класса.
вы в ObservableCollection добавляете так же экземпляр класса, так же с 2мя значениями, но в шаблоне ListItem прописываете биндинг только к одному.
сомтрите вобщем:


Добавлено через 5 минут
щас набросаю минимально необходимый скилет
0
3 / 3 / 4
Регистрация: 29.10.2016
Сообщений: 47
31.10.2016, 00:21 5
Лучший ответ Сообщение было отмечено MrBlack12 как решение

Решение

MrBlack12, вот сделал, Пришлось чуть поправить стиль, который я до этого постил
0
Вложения
Тип файла: zip WpfApplication.zip (12.7 Кб, 20 просмотров)
0 / 0 / 0
Регистрация: 29.03.2014
Сообщений: 3
31.10.2016, 01:19  [ТС] 6
subud, Спасибо огромное! Очень помогли. А за видео отдельное спасибо)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.10.2016, 01:19

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Сделать, чтобы при нажатии checkbox-a появлялась кнопка
Добрый вечер. Очень нужен пример того как на XAMLe как сделать чтобы при нажатии checkbox-a...

Выделение строки ListBox при наведении курсора
Добрый вечер. Подскажите как можно сделать так, чтобы в ListBox, под курсором мыши выделялась...

Выделение строки Listbox при наведении курсора
Всем привет. Подскажите как можно сделать так, чтобы в Listbox, под курсором мыши выделялась...

Как сделать активной группу CheckBox при нажатии RadioButton?
Как сделать активной группу CheckBox при нажатии RadioButton и наоборот?


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.