|
1 / 1 / 0
Регистрация: 20.08.2021
Сообщений: 15
|
|
WPF / UWP DataGrid какое событие возникает после изменения кол-ва строк?12.12.2021, 14:38. Показов 2145. Ответов 14
Метки нет (Все метки)
Привет всем!
Собственно сабж) Вроде всё перепробовал... (манипуляция, лоадед...) (нужно именно после!) Заранее спасибо ВС
0
|
|
| 12.12.2021, 14:38 | |
|
Ответы с готовыми решениями:
14
Какое событие должно быть после изменения в Alert Какое событие нужно использовать для изменения цвета и т д строк DataGridView при его отрисовке
|
|
Модератор
|
||
| 12.12.2021, 16:49 | ||
|
DataGrid - это производный от ItemsControl и строки генерируются в нём. А ItemsControl, вообще, не никаких событий. Если шибко приспичило можно подписаться на изменение Items.CollectionChanged или на Items.PropertyChanged и следить за Items.Count. Но в целом такая задача, мягко говоря, не типична для UWP/WPF. Это инструменты создания GUI (представления Данных), а не средства работы с Данными. Если изменилось количество строк, значит изменилась коллекция которую представляет ItemsControl. Вот за коллекцией и надо следить. Почему она у вас изменяется?
0
|
||
|
1 / 1 / 0
Регистрация: 20.08.2021
Сообщений: 15
|
|
| 12.12.2021, 18:47 [ТС] | |
|
Вообще-то это нужно, чтобы связать SelectedItems - асинхронной командой переносятся из одного грида коллекция в другой и нужно, чтобы эта коллекция была Selected, чтобы просто было отменить/видеть, что выбрано/остался в памяти этот набор и пр.
Grid1 - все предметы, за исключение выбранных Grid2 - все, выбранные предметы как-то так
0
|
|
|
Модератор
|
||
| 12.12.2021, 20:23 | ||
|
Вам нужно пройти циклом по этой коллекции и каждый элемент преобразовать к исходному типу и потом обработать. Совершенно не понятно причём здесь события. Вы же сами пишите асинхронной командой.Команда же вызывается кнопкой, и не зависит от событий DataGrid. В параметр команды передайте DataGrid.SelectedItems и больше ничего не надо.
0
|
||
|
1 / 1 / 0
Регистрация: 20.08.2021
Сообщений: 15
|
|||||||||||||||||
| 12.12.2021, 22:45 [ТС] | |||||||||||||||||
|
вроде справился, но как мне кажется через ужасный костыль.
Делаю в VM интерфейс:
Далее гриды модифицирую этим интерфейсом:
но по другому, вроде никак... Добавлено через 10 минут
0
|
|||||||||||||||||
|
Модератор
|
||
| 12.12.2021, 23:00 | ||
|
Ведь не SelectedItems надо привязывать. К параметр команды привязывать к нему. Чё-то я вас не до понимаю. Покажите XAML с этим DataGrid и кнопкой в которой команда для обработки.
0
|
||
|
1 / 1 / 0
Регистрация: 20.08.2021
Сообщений: 15
|
|
| 12.12.2021, 23:57 [ТС] | |
|
Никаких наворотов: [XML]<controls:AdvancedDataGrid Grid.Row="2"
x:Name="OutGrid" ItemsSource="{Binding OutProxies, UpdateSourceTrigger=PropertyChanged}" SelectionChanged="DataGrid_SelectionChan ged" MouseUp="InOutGrid_MouseUp"> <DataGrid.Columns> <DataGridTextColumn Header="Включить в список:" Binding="{Binding Name, UpdateSourceTrigger=PropertyChanged}" Width="*"/> </DataGrid.Columns> </controls:AdvancedDataGrid> <Button Grid.Row="3" Command="{Binding AsyncSetCommand}" CommandParameter="{Binding ElementName=OutGrid, Path=SelectedItems}" Content="
0
|
|
|
Модератор
|
|||||||
| 13.12.2021, 02:04 | |||||||
|
VovikDoc99, по интерфейсу Форума:
0
|
|||||||
|
Модератор
|
||
| 13.12.2021, 02:14 | ||
|
У вас есть привязанный CommandParameter. А для чего, вы писали выше, вам понадобился сеттер у SelectedItems? P.S. Не относится к вопросу, но всё же. По принятым правилам именования, у асинхронных методов есть постфикс Async. Поэтому вам лучше переименовать команду в SetCommandAsync. Второй аспект, очень не рекомендую использовать асинхронные команды. Они имеют смысл только в развитой реализации где инкапсулируется ей занятость и валидация. Для простого асинхронного вызова метода лучше использовать обычную команду. Это даёт гораздо большую прозрачность и контролируемость коду. Пример реализации и использования асинхронной команды. Вы явно такое не делаете и, следовательно, она вам не нужна, а только внесёт путаницу в ваш код. An example of my implementation of base classes: BaseInpc, RelayCommand, RelayCommandAsync, RelayCommand<T>, RelayCommandAsync<T>.
0
|
||
|
|
|||||||||||||||||||||
| 13.12.2021, 09:11 | |||||||||||||||||||||
Сообщение было отмечено VovikDoc99 как решение
Решение
VovikDoc99,
Ставите из NuGet в слой с View пакет - Microsoft.Xaml.Behaviors.Wpf Пишете в слое с View вот такой Behavior - создает свойство с SelectedItems
SelectionMode="Extended"
SelectedItems.
1
|
|||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 20.08.2021
Сообщений: 15
|
|||||||||
| 15.12.2021, 13:27 [ТС] | |||||||||
|
Andrey-MSK
Спасибо))) Именно в этом и трабл, только set не совсем понятно... отпишусь, когда всё детально проработаю Добавлено через 2 минуты Добавлено через 2 часа 1 минуту Элд Хасп,
Почему у меня всё в один ответ лезит? (разным же персонам отвечаю)
0
|
|||||||||
|
Модератор
|
|||||
| 15.12.2021, 13:41 | |||||
|
И переделывать, если трудозатратно не стоит. Но на будущее лучше задавать имена как принято. Это облегчает взаимопонимание с другими программистами.
Я не говорил о том, что методы нужно вызывать синхронно. Я только о самой команде. Асинхронная команда это инкапсуляция некоторых действий при вызове из метода Execute целевого метода. Совершается ряд скрытых действий как перед вызовом, так и после него. И, при неполном понимании всей этой логики, может привести к трудноуловим багам. Так как вы меня не поняли, то с большой вероятностью вы либо "в слепую" используете асинхронную команду по копипасте, либо у вас обычная команда вызывающая асинхронный метод и вы поэтому дали такое название и команде. Добавлено через 1 минуту До его окончания все сообщения сливаются, если между ними нет сообщений от других пользователей, и если сообщения не содержат вложений.
1
|
|||||
|
1 / 1 / 0
Регистрация: 20.08.2021
Сообщений: 15
|
||||||||||||||||||||||
| 15.12.2021, 19:02 [ТС] | ||||||||||||||||||||||
|
Элд Хасп,
прошу прощения за много кода - послал самую общюю команду, просто попутно не перемудрил ли я? Добавлено через 4 часа 4 минуты Элд Хасп, "Билл Гейтс" пишет имена команд вообще без Async: async-programming-patterns-for-asynchronous-mvvm-applications-commands
0
|
||||||||||||||||||||||
|
1 / 1 / 0
Регистрация: 20.08.2021
Сообщений: 15
|
||||||
| 18.12.2021, 06:03 [ТС] | ||||||
|
Andrey-MSK, Всё получилось даже лучше, чем ожидалось!
пара костылей ушло - тепеь во View остался один метод, к-ый не портит картины:
Только один вопросик остался, почему нужно использовать Behaviors, а не расширить DataGrig свойством WithSetSelectedItems?
0
|
||||||
|
Модератор
|
|||
| 18.12.2021, 07:25 | |||
Сообщение было отмечено VovikDoc99 как решение
РешениеОн входит в MS библиотеку и поэтому доверие к нему такое же как к .Net. Чтение его кода и умение использовать, хотя не относится к базовым навыкам, всё же один из необходимых навыков для WPF программиста. Так же в нём уже есть инкапсулированная логика значительно упрощающая его создание. В данном случае, его без проблем моно заменить AP-свойством или сделать производный DataGrid с дополнительным DP-свойством.
0
|
|||
| 18.12.2021, 07:25 | |
|
Помогаю со студенческими работами здесь
15
Какое событие возникает при потере фокуса в TextBox Какое событие возникает при раскрытии ветки в CTreeView? Какое событие возникает при выборе элемента в ComboBox Какое возникает событие, если завершить процесс приложения Какое событие возникает при разворачивании выпадающего списка? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|