1 | |
Как прокрутить datagrid вниз при добавлении строки?12.07.2016, 13:19. Показов 4066. Ответов 16
Метки нет (Все метки)
Помогите разобраться - как при добавлении строк в datagrid сделать так, чтобы scrollbar "шёл" вниз, а не вверх?
0
|
12.07.2016, 13:19 | |
Ответы с готовыми решениями:
16
Дублируются записи при добавлении в DataGrid [WPF] Не обновляется DataGrid при добавлении данных! При добавлении (удалении) данных в DataGrid не происходит обновление DataGrid + DataTable + БД MS Sql ошибка при изменении/добавлении записи |
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
|
|
12.07.2016, 15:00 | 2 |
После добавления элемента в таблицу вызовите метод DataGrid.ScrollIntoView, передав туда добавленный элемент
0
|
1838 / 1346 / 427
Регистрация: 10.06.2011
Сообщений: 2,126
|
|
12.07.2016, 16:07 | 4 |
Я же написал
Или вы серьёзно добавляете в таблицу объект true для отображения его в DataGrid?)
0
|
0 / 0 / 0
Регистрация: 11.08.2019
Сообщений: 1
|
||||||
05.12.2020, 17:59 | 5 | |||||
Верно говорили что нужно передать объект в ScrollIntoView() вот только true - это не объект.
Нужно просто передать последний элемент в таблице:
0
|
26 / 11 / 1
Регистрация: 20.05.2015
Сообщений: 211
|
|||||||||||
17.07.2022, 16:14 | 6 | ||||||||||
Усложню вопрос .
А если речь о MVVM и привязках, как вызывать скрол DataGrid к нужной строке при добавлении/изменении привязанной коллекции (в идеале - скрол к нужному элементу, для начала - хотя бы в конец). Допустим есть
События AddingNewItem, TargetUpdated не срабатывают при изменении коллекции.
0
|
1181 / 623 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
||||||
17.07.2022, 17:39 | 7 | |||||
Добавьте в проект следующий файл:
Attached property ScrollViewerEx Потом присоедениете свойство attachedProperties:ScrollViewerEx.AutoScrollToEnd="True"
1
|
26 / 11 / 1
Регистрация: 20.05.2015
Сообщений: 211
|
|
17.07.2022, 18:51 | 8 |
limeniye, Спасибо. Хотя удивительно, что нужно целое свойство для этого делать.
0
|
1181 / 623 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
17.07.2022, 18:59 | 9 |
Кто сказал, что нужно? Можете не создавать, просто потом придётся одно и то же кучу раз копипастить.
0
|
Модератор
|
|
17.07.2022, 23:41 | 10 |
Чем вызвано нарушение правил именования при объявлении AttachedProperty?
Пробовали задать не значение, а привязку к ScrollViewerEx.AutoScrollToEnd? И почему у него такой сложный сеттер? Тем более что есть метод вызываемый при его изменении. Всю логику сеттера надо переместить в этот метод.
0
|
1181 / 623 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
18.07.2022, 00:07 | 11 |
Элд Хасп, автор не я, скопипащенно ещё месяц назад с другого немалоизвестного всем ресурса.
Не пробовал. Есть какие-то опасения?
0
|
18.07.2022, 08:58 | 12 | |||||||||||||||
werymag, limeniye, Вот ещё вариант этого свойства
Из NuGet поставить вот это - https://github.com/microsoft/XamlBehaviorsWpf В XAML, в разделе Window, подключить вот это
Ну и в методе изменения коллекции выставлять SelectedItem куда надо...
2
|
Модератор
|
|
18.07.2022, 09:31 | 13 |
AP-свойство это
AutoScrollProperty .А методы Get/SettAutoScrollToEnd - это CLR оболочка. Дизайнер и Компилятор XAML при анализе обращения к "неродному" свойству сначала ищут AP-свойство добавляя к нему постфикс Property . Это определенно соглашением (контрактом) WPF: Создание присоединенного свойства.Если свойство не находится, то ищется его CLR-оболочка добавлением префиксов Get/Set. Что из этого следует: 1) Так как вы нарушили соглашение имён, то возможно привязку не удастся создать, так как для неё нужно AP-свойство, а не его оболочка; 2) Даже, если внесены изменения в актуальные Дизайнер и Компилятор XAML и они смогут найти AP-свойство по регистрационным данным (но мне кажется это весьма сомнительно, я не слышал о таком) и они смогут задать привязку к AP-свойству, то вся логика Set/Get методов будет обходится, так как привязка работает напрямую с AP/DP-свойствами, а не их CLR оболочками. И вся ваша логика сеттера не будет исполнена. Добавлено через 21 минуту Вы немного расплывчато обозначили задачу. В View можно прослушивать изменение представляемого списка и изменение выбранного элемента. При изменении выделения, наверное, логично прокручивать список до видимости выбранного элемента. Насколько понял, это делает реализация от Andrey-MSK. А вот с изменением списка сложнее. У него есть следующие действия (изменения): очистка, вставка элементов, удаление элементов, перестановка элементов, замена элементов. См. NotifyCollectionChangedAction. Как я понял, в варианте от limeniye, при любом действии происходит примотка до конца списка. Что в общем виде может быть не всегда верно. Например, возможна же вставка в начало или заменена первого элемента. Зачем тогда проматывать в конец? Наоборот нужна промотка в начало. В общем, обработка изменения списка вызывает много концептуальных воппросв. На мой взгляд оптимальными являются два варианта: 1) Автопромотка до выделенного элемента; 2) Или явный вызов в VM промотки до указанного элемента. Независимо от того выделен он, добавлен, изменён и т.п. Что то типа метода ShowElement(SomeType element) работающего через событие или внедрение зависимого делегата.
0
|
18.07.2022, 09:48 | 14 | |||||
Элд Хасп, Ну дак с Behavior можно промотать куда угодно по условию, хоть на новый элемент, хоть на редактируемый, просто присваиваем SelectedItem что нужно и всё:
0
|
1181 / 623 / 160
Регистрация: 19.04.2018
Сообщений: 2,923
|
|
18.07.2022, 10:56 | 15 |
Andrey-MSK, я не понял, зачем Вам Behavior, в данном случае.
На мой взгляд — неуместно.
0
|
18.07.2022, 11:02 | 16 |
Нашел это решение для перемотки DataGrid на SelectedItem из ViewModel, тут на форуме реализацию Behavior манёк подправили и так его и использую.
Если без этого Behavior назначить SelectedItem, то он конечно переедет туда, но вот DataGrid не перемотается на него...
0
|
Модератор
|
|
18.07.2022, 11:32 | 17 |
Я понял. И написал об этом.
Но так же может потребоваться задача показать элемент, но без его выбора. Например, в ItemsControl. Добавлено через 3 минуты Ну....., я бы так не сказал. Что такое "автоскрул до нужного элемента"? На мой взгляд, это всё же не значение (свойство), а поведение. Да, конечно, тот же Behavior под капотом это тоже AP-свойство. Но разработчики привыкли его ассоциировать именно с заданием нового поведения элементу. Добавлено через 6 минут limeniye, кстати, в реализации Behavior намеренно используется нарушение имён для AP-свойств. По сути он хоть и работает через AP-свойство, но по функциональной логике это обычный статический CLR метод, который из-за префикса Get распознаётся Дизайнером и Компилятором XAML как чужое свойство. AP-свойство в Behavior используется для слабой связи между объектом (UI элементом) и внешней коллекцией Behaviors. Но можно тоже самое реализовать и через словарь со слабыми ключами. Добавлено через 11 минут Вот таким словарём (или таблицей?) можно заменить скрытое AP-свойство: ConditionalWeakTable<TKey,TValue>.
1
|
18.07.2022, 11:32 | |
18.07.2022, 11:32 | |
Помогаю со студенческими работами здесь
17
Как при выделении строки в DataGrid передавать ее в свойство? Как применить стиль строки dataGrid к определенному dataGrid При прокрутке вниз блок убирается а если прокрутить вверх то появляется Перемещение строк в консоли вниз при добавлении новой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |