С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
87 / 55 / 15
Регистрация: 01.10.2010
Сообщений: 492
1

Передача значения поля привязки в шаблон в качестве параметра

20.04.2018, 11:21. Показов 1181. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/// <summary>
    /// DataGrid со столбцом из CheckBox
    /// </summary>
    public class CheckBoxDataGridControl : BaseDataGrid
    {
        /// <summary>
        /// Имя поля для привязки столбцов с CheckBox
        /// </summary>
        public string ActionCheckBoxColumnFieldName { get; set; }
 
        /// <summary>
        /// CheckBox заголовка
        /// </summary>
        private CheckBox HeaderCheckBox { get; set; }
 
        /// <summary>
        /// Конструктор
        /// </summary>
        public CheckBoxDataGridControl()
        {
            // Шаблон для строк
            FrameworkElementFactory frameworkRowElementFactory = new FrameworkElementFactory(typeof(CheckBoxRowTemplate));
            DataTemplate dataRowTemplate = new DataTemplate();
            dataRowTemplate.VisualTree = frameworkRowElementFactory;
            frameworkRowElementFactory.AddHandler(CheckBox.ClickEvent, new RoutedEventHandler(RowCheckBox_OnClick));
 
            // Шаблон для заголовка
            FrameworkElementFactory frameworkHeaderElementFactory = new FrameworkElementFactory(typeof(CheckBoxHeaderTemplate));
            DataTemplate dataHeaderTemplate = new DataTemplate();
            dataHeaderTemplate.VisualTree = frameworkHeaderElementFactory;
            frameworkHeaderElementFactory.AddHandler(CheckBox.ClickEvent, new RoutedEventHandler(HeaderCheckBox_OnClick));
            frameworkHeaderElementFactory.AddHandler(CheckBox.LoadedEvent, new RoutedEventHandler(HeaderCheckBox_OnLoaded));
 
            // Добавляем столбец
            DataGridTemplateColumn dataGridTemplateColumn = new DataGridTemplateColumn();
            dataGridTemplateColumn.CellTemplate = dataRowTemplate;
            dataGridTemplateColumn.HeaderTemplate = dataHeaderTemplate;
            Columns.Add(dataGridTemplateColumn);
 
            // Событие для блокировки записей
            LoadingRow += DataGridWithDisableRows_LoadingRow;
        }
 
        /// <summary>
        /// Click по CheckBox заголовка
        /// </summary>
        private void HeaderCheckBox_OnClick(object sender, RoutedEventArgs e)
        {
            if (ItemsSource != null)
            {
                // Отмечаем/снимаем флажок только для незаблокированных записей
                foreach (TableObject tableObject in ItemsSource)
                    if (!tableObject.IsDisable)
                        tableObject.IsAction = (bool) HeaderCheckBox.IsChecked;
                // Обновить записи
                Items.Refresh();
            }
        }
 
        /// <summary>
        /// Click по CheckBox строки
        /// </summary>
        private void RowCheckBox_OnClick(object sender, RoutedEventArgs e)
        {
            SetHeaderFromContent();
        }
 
        /// <summary>
        /// Загрузка CheckBox заголовка
        /// </summary>
        private void HeaderCheckBox_OnLoaded(object sender, RoutedEventArgs e)
        {
            HeaderCheckBox = (CheckBox)sender;
            SetHeaderFromContent();
 
            // Если блокированы все строки, то блокируем и заголовок
            if(ItemsSource != null)
                if (ItemsSource.Cast<TableObject>().ToList().All(x => x.IsDisable))
                    HeaderCheckBox.IsEnabled = false;
        }
 
        /// <summary>
        /// Установить состояние CheckBox заголовка в зависимости от состояний CheckBox строк
        /// </summary>
        public void SetHeaderFromContent()
        {
            if (ItemsSource != null)
            {
                List<TableObject> enableTableObjects = ItemsSource.Cast<TableObject>().ToList().FindAll(x => !x.IsDisable);
                if (!enableTableObjects.Any())
                    HeaderCheckBox.IsChecked = false;
                else
                    HeaderCheckBox.IsChecked = enableTableObjects.All(x => x.IsAction);
            }
        }
 
        /// <summary>
        /// Шаблон для CheckBox строки
        /// </summary>
        public class CheckBoxRowTemplate : CheckBox
        {
            /// <summary>
            /// Конструктор
            /// </summary>
            public CheckBoxRowTemplate()
            {
                VerticalAlignment = VerticalAlignment.Center;
                Binding binding = new Binding("IsAction");
                binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                BindingOperations.SetBinding(this, IsCheckedProperty, binding);
            }
        }
 
        /// <summary>
        /// Шаблон для CheckBox заголовка
        /// </summary>
        public class CheckBoxHeaderTemplate : CheckBox
        {
            /// <summary>
            /// Конструктор
            /// </summary>
            public CheckBoxHeaderTemplate()
            {
                VerticalAlignment = VerticalAlignment.Center;
            }
        }
 
        /// <summary>
        /// Загрузка записей
        /// </summary>
        private void DataGridWithDisableRows_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            if (e.Row.DataContext is TableObject)
            {
                TableObject tableObject = (TableObject) e.Row.DataContext;
                e.Row.IsEnabled = !tableObject.IsDisable;
            }
        }
    }
Привязка Checked в конструкторе CheckBoxRowTemplate() всегда постоянна IsAction. Как сделать так, чтобы название поля привязки было непостоянным и передавалось значением из поля ActionCheckBoxColumnFieldName
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.04.2018, 11:21
Ответы с готовыми решениями:

Передача значения поля со списком в качестве параметра запроса
В форме Курсы по кафедрам при нажатии на кнопку Открыть отчет в качестве параметра запроса для...

Передача поля Record в процедуру в качестве параметра
Необходимо у ВСЕХ однотипных записей Record (экземпляров одного и того же Record) поменять значение...

Передача параметра в метод без привязки к типу
Добрый день! Подскажите как можно записать метод, с одним параметром (аргументом), который не был...

Шаблон класса в качестве параметра другому шаблону
Почему у меня не получается сделать так: template &lt;typename T&gt; class A { // .... };...

0
20.04.2018, 11:21
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.04.2018, 11:21
Помогаю со студенческими работами здесь

Передача % в качестве параметра
Помогите плз. Создал хранимую процедуру с параметром. TableAdapter.FiilBy(dataset1, int...

Как передать шаблон в качестве параметра при вызове функции?
Не знаю понятно ли объяснил вопрос в заголовке, поэтому приложу сюда код: fun &lt;E&gt; rotate(matrix:...

Передача функции в качестве параметра
Есть ф-я для отправки формы аяксом function ajaxFormRequest(form_id, url, dataT, some_func) { ...

Передача функции в качестве параметра
Есть функция которая генерирует строковые переменные и записывает их в файл. В файл они должны...

Передача массива в качестве параметра
Добрый день! Стоит такой вопрос: пусть существует функция, принимающая в качестве аргумента...

Передача класса в качестве параметра
Возможно ли передать класс в качестве параметра определённой функции что бы она на базе этого...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
Как создать приложение для фитнеса для iOS/iPhone на Kotlin
InfoMaster 14.01.2025
Создание собственного фитнес-приложения — это не только захватывающий, но и полезный процесс, ведь оно может стать вашим верным помощником на пути к здоровому и активному образу жизни. В современных. . .
Как создать приложение магазина для iOS/iPhone на Swift
InfoMaster 14.01.2025
Введение в разработку iOS-приложений Разработка приложений для iPhone и других устройств на базе iOS открывает огромные возможности для создания инновационных мобильных решений. В данной статье мы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru