|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
DataGrid, как я понял, предназначен для работы с БД и работает транзакциями. Поэтому не очень подходит для редактирования небольших списочных свойств. В инете много разных способов приспособления DataGrid для этих целей, но все они какие-то "корявые". Поэтому и хотел поинтересоваться, более красивым логичным решением. Приведу пример и объясню, что мне в нём не нравится. Класс для элементов списка Код: 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.
Модель Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Модель представления Код: 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.
Окно Код: 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.
Code Behind Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Набор классов для работы с командами не прикладываю, он идентичен предоставленному Романом в http://www.sql.ru/forum/1304673/pravilnoe-razmeshhenie-funkcionala-i-privyazki-komand Теперь что мне не нравится. 1) Использование обработчиков событий для отслеживания изменений в DataGrid. Вызов методов VM из CB. 2) Отсутствие у DataGrid события извещения о немедленном изменений значений в ячейке. В данном пример, это приводит к тому, что кнопка не активна до тех пор пока не выйдешь из первой изменённой ячейки. Если изменяешь только одну и надо сразу сохранить изменения, то так не получится. Т.е. более удобным здесь было бы событие аналогичное TextBox.TextChanged 3) Добавление новой строки только после выхода из редактирования предыдущей новой. Это приводит к тому, что когда ввёл значение в новую строку и пытаешься его сохранить кликнув по кнопке - кнопка отпрыгивает и надо переводить курсор и заново кликать по кнопке. Вижу несколько вариантов решения: - Изменить класс FieldTwoProperty добавив в него события извещения изменения элементов, создания нового элемента и потом прослушивать их. - Создать кастомный вид коллекции для источника DataGrid - Вместо DataGrid создать свой UserControl Какие ещё могут быть варианты? Какое решение будет лучше соответствовать концепциям WPF, MVVM ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 13:19 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld Hasp1) Использование обработчиков событий для отслеживания изменений в DataGrid. Вызов методов VM из CB. 2) Отсутствие у DataGrid события извещения о немедленном изменений значений в ячейке.Честно говоря, в твой код не вчитывался. Я работал с DataGrid, где каждая строка привязана к VM строки, и мне не требовался CB, не очень понял, для чего он нужен. Что касается уведомления об изменении текстбокса - делаешь свой CellEditTemplate в виде того же текстбокса и делаешь привязку к модели с немедленным уведомлением свойства (а не по потере фокуса). ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 13:28 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld Haspсоответствовать концепциям WPF, MVVM ?не нужно пихать концепцию в грид. Это слишком мелко. Вы просто доводите компонент штатный до своих хотелок, либо берете готовый https://docs.telerik.com/devtools/wpf/controls/radgridview/overview2 Компонент должен быть максимально изолирован от остального прикладного кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 13:39 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspПоэтому не очень подходит для редактирования небольших списочных свойств.они тоже в бд как справочники. Поэтому модель обычно другая. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 13:43 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123не нужно пихать концепцию в грид.Как вариант. Я делал одну оболочку для него, это был именно юзерконтрол с СВ (из-за динамической загрузки столбцов, динамического назначения селекторов шаблонов) - но с точки зрения эксплуатации - да, концепция "черный ящик", а снаружи DP для встраивания в MVVM ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 13:46 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld Haspпредназначен для работы с БД и работает транзакциями. Да ну, ерунда. Никаких транзакций там нет, и DataGrid вообще не в курсе, откуда пришли данные, и как сохраняются. Eld HaspТеперь что мне не нравится. Что мне не нравится сразу же и навскидку: Equals и GetHashCode зависят от значений изменяемых полей. На этом моменте можно долго и весело ловить разные баги (и да, я их ловил). Вышеупомянутые методы в связке должны идентифицировать объект (и балансировать дерево) вне зависимости от жизненного цикла объекта. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 13:47 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныEqualsда. С бд этого вообще не нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 13:49 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Shocker.ProPetro123не нужно пихать концепцию в грид.Как вариант. Я делал одну оболочку для него, это был именно юзерконтрол с СВ (из-за динамической загрузки столбцов, динамического назначения селекторов шаблонов) - но с точки зрения эксплуатации - да, концепция "черный ящик", а снаружи DP для встраивания в MVVMя помню. Но редко встречается, когда неизвестно сколько столбцов. У вас проект - динамика. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 13:50 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
В субд и ОРМ однозначно идентифицирует объект PK. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 13:52 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Shocker.ProEld Hasp1) Использование обработчиков событий для отслеживания изменений в DataGrid. Вызов методов VM из CB. 2) Отсутствие у DataGrid события извещения о немедленном изменений значений в ячейке.Честно говоря, в твой код не вчитывался. Я работал с DataGrid, где каждая строка привязана к VM строки, и мне не требовался CB, не очень понял, для чего он нужен. Что касается уведомления об изменении текстбокса - делаешь свой CellEditTemplate в виде того же текстбокса и делаешь привязку к модели с немедленным уведомлением свойства (а не по потере фокуса).С TextBox в ячейке DataGrid пробовал. Там получаются проблемы с редактированием TetxBox - нужно два клика. Первым кликом выделяется ячейка, а вторым входишь в редактировании TextBox. В новой строке, там по моему, вообще получалось три клика, и какие-то проблемы с добавлением в источник новой строки. Т.е. не получалось сравнить источник DG с источником в модели и определить, что изменения произошли.Сон Веры Павловны.... Да ну, ерунда. Никаких транзакций там нет, и DataGrid вообще не в курсе, откуда пришли данные, и как сохраняются. Я может не правильно выразился. Я имел ввиду, конкретно, вот такой нюанс. Новая строка в DataGrid существует только в нём. В источнике её нет. Поэтому по источнику не получится определить были изменения или нет. В идеале, мне нужно получить такое поведение. При любом изменении в новой строке DG она сразу должна добавиться в источник. И, соответственно, в DG появится снизу другая новая строка.Сон Веры ПавловныЧто мне не нравится сразу же и навскидку: Equals и GetHashCode зависят от значений изменяемых полей... В данном случае мне надо определить были ли внесены изменения в список, для этого мне надо сравнить список из DG и список в модели. Любое расхождение между списками: разное количество элементов, разная их последовательность, любое изменение в одном из свойств. Для последнего я и переопределил Equals. Если такой подход не верен, то как лучше сделать?Petro123не нужно пихать концепцию в грид. Это слишком мелко. Вы просто доводите компонент штатный до своих хотелок, либо берете готовый https://docs.telerik.com/devtools/wpf/controls/radgridview/overview2 Компонент должен быть максимально изолирован от остального прикладного кода.Под одной из концепцией я и имел ввиду "Компонент должен быть максимально изолирован от остального прикладного кода". Это одна из причин почему мне не нравится решение в моём примере. radgridview - посмотрю, что за зверь. А как довести "компонент штатный до своих хотелок" - не знаю. То ли "хотелок" больше чем возможности штатного элемента, то ли мои возможности и умения значительно ниже моих "хотелок" ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:28 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld Hasp, Есть грид эксель, и есть грид для субд. Тебе какой? ЗЫ в дельфи это 2 разных грида. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:32 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld Haspразная их последовательность,??? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:35 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspТо ли "хотелок" больше чем возможности штатного элементаДа. DataGrid вообще довольно слабый. Но хорошие гриды стоят денег, а бесплатные - г. Так что либо платить деньги, либо пилить свой, с маджонгом и гейшами ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:35 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld Hasp, Есть грид эксель, и есть грид для субд. Тебе какой? ЗЫ в дельфи это 2 разных грида.DataDrid из C# + WPF + VS2017 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:43 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld Haspто ли мои возможности Третья причина в том что ты с базами на вы. А надо на ты. Без них сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:44 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld Haspразная их последовательность,???Допустим, в DG поменяли местами первую и вторую строку. То есть элементы те же, но их последовательность другая. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:45 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspDataDrid из C# + WPF + VS2017я говорил о запросах. Какой нужен?. Т.к. очередность в коллекции это странно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:46 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspДопустим, в DG поменяли местами первую и вторую строку. То есть элементы те же, но их последовательность другая.жмакнули на сортировку? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:47 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld Haspто ли мои возможности Третья причина в том что ты с базами на вы. А надо на ты. Без них сложно.В данном случае в решении, вообще, нет БД. Небольшое приложение - данные из XML файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:47 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld Haspданные из XML файла.а там имеет значение очередность? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:49 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspДопустим, в DG поменяли местами первую и вторую строку. То есть элементы те же, но их последовательность другая.жмакнули на сортировку?Ну в том числе. Или пользователю, захотелось какую-то строку переместить для своего удобства. Так как данные в XML, то при любом изменении всё равно надо сохранять весь файл. Поэтому я просто определяю есть изменения или нет. Если есть, то всю инфу пересохраняю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:50 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld Haspданные из XML файла.а там имеет значение очередность?Только удобство для пользователя. Так как таких строк может или вообще не быть, или быть много. Они могут не помещаться все на видимом поле. И пользователь может передвинуть их вверх вниз в зависимости от того, что ему нужно видеть в первую очередь. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:53 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld Hasp, Мрак. Короче, ты жить богато и с зарплатой хочешь? Тогда дальнейшее твое творчество уже наносит вред развитию программиста. Выкинь xml и этот топик будет не нужен. Удачи! Имхо. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:53 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Shocker.ProEld HaspТо ли "хотелок" больше чем возможности штатного элементаДа. DataGrid вообще довольно слабый. Но хорошие гриды стоят денег, а бесплатные - г. Так что либо платить деньги, либо пилить свой, с маджонгом и гейшами Пойду - пилить.... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:55 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspОни могут не помещаться все на видимом поле. И пользователь может передвинуть их вверх вниз в зависимости от того, что ему нужно видеть в первую очередь.а) скроллинг б) доп. Колонка и свойство Очередность. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:56 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspЯ имел ввиду, конкретно, вот такой нюанс. Новая строка в DataGrid существует только в нём. В источнике её нет. Поэтому по источнику не получится определить были изменения или нет. В идеале, мне нужно получить такое поведение. При любом изменении в новой строке DG она сразу должна добавиться в источник. Отдельный диалог для ввода новой строки эту проблему вполне решает. И я по возможности стараюсь именно так и делать. Eld HaspВ данном случае мне надо определить были ли внесены изменения в список, для этого мне надо сравнить список из DG и список в модели. Любое расхождение между списками: разное количество элементов, разная их последовательность, любое изменение в одном из свойств. Для последнего я и переопределил Equals. Если такой подход не верен, то как лучше сделать? Ну, Equals сам по себе описанную задачу не решает, он просто проверяет эквивалентность экземпляров классов. Здесь возникают такие вопросы: 1) Откуда в DG взялся отдельный список? Вы биндите к DG отдельную копию? 2) Если списки различаются - что присходит дальше? 3) Допустим, в списке отображаются фамилия и имя пользователя. В последней строке был Петров Вася. Эту последнюю строку удалили, добавили новую, и снова ввели "Петров" и "Вася". Различия есть? Или нет? 4) Поскольку Equals и GetHashCode зависят от пользовательского ввода, то вполне возможны дублированные записи - т.е. несколько разных элементов списка, которые будут эквивалентны. Что планировалось делать в таком случае? Eld Haspradgridview - посмотрю, что за зверь. А как довести "компонент штатный до своих хотелок" - не знаю. То ли "хотелок" больше чем возможности штатного элемента, то ли мои возможности и умения значительно ниже моих "хотелок" А вы озвучте хотелки. У стандартного грида есть и группировки, можно прикрутить и фильтрацию, и, возможно, некий наименьший общий знаменатель вполне устроит (меня вот он в 90% случаев устраивает). Я лично не работал с телериковским гридом, но в случае с гридом от девэкспресса за его мегафункционал всегда приходилось расплачиваться тяжеловесностью UI - просто на уровне отклика UI. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 14:58 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld Hasp, Мрак. Короче, ты жить богато и с зарплатой хочешь? Тогда дальнейшее твое творчество уже наносит вред развитию программиста. Выкинь xml и этот топик будет не нужен. Удачи! Имхо.Это не кому-то на заказ. Просто появилась возможность (в основном время) заняться освоением WPF и C#. Чтобы не в пустую из головы придумывать задачи, посмотрел, что чуток может помочь в работе. Создаю приложение и учусь на этом. Пока хочу хоть более-менее WPF и C# освоить. До БД пока... токо смотрю в ту сторону. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:00 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspОни могут не помещаться все на видимом поле. И пользователь может передвинуть их вверх вниз в зависимости от того, что ему нужно видеть в первую очередь.а) скроллинг б) доп. Колонка и свойство Очередность.Скроллинг - это понятно. Он и так будет. А вот доп. Колонка - зачем это пользователю? Ему просто надо передвинуть строки вверх-вниз. Доп колонка для него лишнее. А при сохранении всё равно это преимущества не даст, так данные (в доп. колонке) всё рано изменились. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:04 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspА вот доп. Колонка - зачем это пользователю?ты сам ввел в Модель важное для ТЕБЯ свойство очередность. Разве нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:09 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныОтдельный диалог для ввода новой строки эту проблему вполне решает. И я по возможности стараюсь именно так и делать.+1 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:11 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspСоздаю приложение и учусь на этом.делая свой грид но не зная субд? Это уже перекос будет. Как для двоих сразу юзверей сделать программу на xml без субд? Без транзакции? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:13 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Сон Веры ПавловныEld HaspЯ имел ввиду, конкретно, вот такой нюанс. Новая строка в DataGrid существует только в нём. В источнике её нет. Поэтому по источнику не получится определить были изменения или нет. В идеале, мне нужно получить такое поведение. При любом изменении в новой строке DG она сразу должна добавиться в источник. Отдельный диалог для ввода новой строки эту проблему вполне решает. И я по возможности стараюсь именно так и делать. Да, это одно из решений. Так тоже делал. Но мне кажется, "красивее" и удобнее делать это в DataGrid - если возможно, конечно. Сон Веры ПавловныEld HaspВ данном случае мне надо определить были ли внесены изменения в список, для этого мне надо сравнить список из DG и список в модели. Любое расхождение между списками: разное количество элементов, разная их последовательность, любое изменение в одном из свойств. Для последнего я и переопределил Equals. Если такой подход не верен, то как лучше сделать? Ну, Equals сам по себе описанную задачу не решает, он просто проверяет эквивалентность экземпляров классов. Здесь возникают такие вопросы: 1) Откуда в DG взялся отдельный список? Вы биндите к DG отдельную копию? 2) Если списки различаются - что присходит дальше? 3) Допустим, в списке отображаются фамилия и имя пользователя. В последней строке был Петров Вася. Эту последнюю строку удалили, добавили новую, и снова ввели "Петров" и "Вася". Различия есть? Или нет? 4) Поскольку Equals и GetHashCode зависят от пользовательского ввода, то вполне возможны дублированные записи - т.е. несколько разных элементов списка, которые будут эквивалентны. Что планировалось делать в таком случае? 1) Да - список в DG это копия списка в модели. Сохранить данные из View можно только явно - нажав на кнопку. 2) Если списки различаются, то становится активной кнопка "Сохранить" и пользователь может сохранить данные. Так же при переходе к другому списку (в данном примере этот функционал не реализован) пользователю выводится предупреждение, что он может потерять данные. 3) По алгоритму это будут считаться одинаковыми списками. 4) Они так и будут дублироваться, пользователя в этом не ограничиваю. Возможно, потом, проверю при пробной эксплуатации, сделаю предупреждение об этом, но ограничивать не буду. Сон Веры ПавловныEld Haspradgridview - посмотрю, что за зверь. А как довести "компонент штатный до своих хотелок" - не знаю. То ли "хотелок" больше чем возможности штатного элемента, то ли мои возможности и умения значительно ниже моих "хотелок" А вы озвучте хотелки. У стандартного грида есть и группировки, можно прикрутить и фильтрацию, и, возможно, некий наименьший общий знаменатель вполне устроит (меня вот он в 90% случаев устраивает). 1) При изменении значения любой ячейки сразу (без выхода из фокуса) определить это, чтобы сделать кнопку "Сохранить" активной (это для данного примера, но есть ещё небольшой и другой функционал). 2) При изменении любой ячейки в новой строке, снизу сразу должна появиться другая новая строка. 3) По возможности для решения как можно меньше использовать CB. Первый, пункт я ещё как-то представляю решение с помощью TextBox в ячейке. При фокусе на ячейке сразу перевести TextBox в режим редактирования. Придётся использовать событие TextBox.TextChanged и обработчик присоединять через EventSetter. Но не знаю насколько хорошее такое решение. Второй пункт как сделать не знаю. Нужны подсказки. Хотя бы в какую сторону копать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:31 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspА вот доп. Колонка - зачем это пользователю?ты сам ввел в Модель важное для ТЕБЯ свойство очередность. Разве нет?Да, но для этого достаточно, в данном случае, индекса элемента в списке. По нему я и определяю очерёдность. Это нагляднее и удобнее для пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:36 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspСоздаю приложение и учусь на этом.делая свой грид но не зная субд? Это уже перекос будет. Как для двоих сразу юзверей сделать программу на xml без субд? Без транзакции?Пока - да. Освоюсь с WPF буду прикручивать БД. Пока хочу максимально абстрагироваться от способа хранения данных. Чтобы изменив модель можно было ничего другого не трогать. Поэтому и не хочу привязывать DG напрямую к данным. И данная в примере часть, работает только с небольшим списком дополнительных свойств или информации. Есть ещё другие данные большего объёма, там без БД в многопользовательском режиме не обойтись, пока делаю просто пробную однопользовательскую реализацию. Для самообучения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 15:43 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspПока хочу максимально абстрагироваться от способа хранения данных.не выйдет. При бд весь твой топик и опыт прямиком в мусор. А сейчас, на событие отрисовки ЯЧЕЙКИ подставляй data[row, column] ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 16:19 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspПока хочу максимально абстрагироваться от способа хранения данных.не выйдет. При бд весь твой топик и опыт прямиком в мусор. А сейчас, на событие отрисовки ЯЧЕЙКИ подставляй data[row, column] )))Я то опыт накапливаю сейчас для работы с WPF и C#. Даже если код не пригодится, опыт-то останется. Что касается отрисовки, то такое часто применял при работе с WinForms. Там, по сути, по другому и невозможно. Хотелось бы чего-то другого в WPF. Я всё же склоняюсь к UserControl. Мне кажется это лучшее выглядит для WPF. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 17:18 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspДаже если код не пригодится, опыт-то останется.хороший оксюморон)). Делайте! Вас все равно не свернуть с пути. Удачи! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 17:42 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspЯ то опыт накапливаю сейчас для работы с WPF и C#. Даже если код не пригодится, опыт-то останется.Делай, не слушай Петю, он, похоже, никогда не учился, сразу родился программистом. Код, написанный два-три года назад, тем более в учебных целях, не пригодится, но опыт будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 17:45 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Shocker.ProEld HaspЯ то опыт накапливаю сейчас для работы с WPF и C#. Даже если код не пригодится, опыт-то останется.Делай, не слушай Петю, он, похоже, никогда не учился, сразу родился программистом. Код, написанный два-три года назад, тем более в учебных целях, не пригодится, но опыт будет.Ну токо с Вашей помощью! Куда ж я без Вас! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 17:56 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
DG пофигу на транзакции, это обычный элемент управления и к таблицам БД он имеет посредственное отношение , которое заключается в том, что он поддерживает DataTable класс. Лично я, по возможности, использую всегда DataGrid, ведь с помощью шаблонов я могу выкинуть из него всё, что хочу. Есть еще вариант ListView, он более легковесный. В DG всё готово, добавление\редактирование\горизонтальная виртуализация, сортировка и бери и пользуйся, но не без проблем конечно. При использовании команд, состояние кнопки IsEnabled зависит от выполнения метода CanExecute, по этому у вас кнопка и не включается. Для того, чтоб кнопка обновила статус, нужно вручную вызвать метод CommandManager.InvalidateRequerySuggested() если обновление кнопки подписывается на этот вызов, см. пример ниже Код: c# 1. 2. 3. 4. 5.
или возбудить внутреннее событие кнопки CanExecuteChanged, с её обычной реализацией Код: c# 1.
В первом случае учтите, что при таком подходе, вызов метода InvalidateRequerySuggested приведет к проверке всех команд которые подписаны на CommandManager.RequerySuggested. По этому, CanExecute должен быть максимально быстрой операцией. Можно сделать, проще и дёргать событие ICommand.CanExecuteChanged вручную, либо отслеживать изменение свойств заданной модели представления через INPC внутри команды и возбуждать событие как это сделано во всякие MVVMLight и прочем. Так же в биндинге источник обновляется по триггеру, который по умолчанию в 99% случаев задан как обновление при потере фокуса, но можно поменять на немедленное обновление. "{Binding UpdateSourceTrigger=PropertyChanged}" В примере есть 2 кнопки, настроенные на разные команды, но выполняющие одни и те же методы. У 1 кнопки состояние обновляется, а у второй кнопки нет. Код: 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.
Код: xml 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:01 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Но в целом у меня от WPF впечатление какой-то сыроватости. Вроде, как хорошее начало, идеи, но начинаешь делать то того не хватает, то то как-то по кривому делать приходится, то сложности на пустом месте - какая-то мелочь в сотню строк обходится и т.д. Ни как не пойму это у меня такое впечатление от нехватки знаний, или оно так и есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:01 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Shocker.ProДелай, не слушай Петюдетский сад пенсионера не любящего модальных окон) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:36 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman MejtesDG пофигу на транзакции, это обычный элемент управления и к таблицам БД он имеет посредственное отношение , которое заключается в том, что он поддерживает DataTable класс.Мне где-то попадалась (не могу найти сейчас) статья о том, как DG вносит изменения в источник. И там было объяснено, что у DG есть какое-то внутреннее представление или буфер для данных. И изменения происходят там. По умолчанию данные скидываются в источник при выходе (потере фокуса) из строки. Можно изменить на скидывание по выходу из ячейки. С новой строкой - только по выходу из строки. Я не помню как точно - но там было название этого механизма. И транзакцией я его назвал не правильно, просто не смог найти правильного названия. Roman MejtesЛично я, по возможности, использую всегда DataGrid, ведь с помощью шаблонов я могу выкинуть из него всё, что хочу. Есть еще вариант ListView, он более легковесный. В DG всё готово, добавление\редактирование\горизонтальная виртуализация, сортировка и бери и пользуйся, но не без проблем конечно.Ага...! То что для Вас "не без проблем" это для меня два дня копания в инете и несколько десятков пробных вариантов. Roman MejtesПри использовании команд, состояние кнопки IsEnabled зависит от выполнения метода CanExecute, по этому у вас кнопка и не включается. Для того, чтоб кнопка обновила статус, нужно вручную вызвать метод CommandManager.InvalidateRequerySuggested() если обновление кнопки подписывается на этот вызовКнопка у меня включается нормально. Повесил привязку на Button.IsEnabled к свойству VM показывающему о наличии/отсутствии изменений. Это свойство в любом случае у меня есть в VM, так как нужно ещё для другого функционала кроме кнопки. Я этот кусок делал ещё то того как начал знакомится с командами - использовал события. После Вашей помощи начал переделывать. А CanExecute - я просто забыл переделать. Было свойство и я на автомате прибиндил к нему Button.IsEnabled. Для чистоты, раз использую команды, конечно надо переделать. Вы безусловно правы.Roman MejtesТак же в биндинге источник обновляется по триггеру, который по умолчанию в 99% случаев задан как обновление при потере фокуса, но можно поменять на немедленное обновление. "{Binding UpdateSourceTrigger=PropertyChanged}" Я знаю об этом триггере, у меня в примере он установлен. Но для "поимки" изменения в источнике, в данном случае это элемент списка, придётся ловить его в самом элементе и потом "проталкивать" до VM - объявить событие в классе элемента и подписать на него VM. А для новой строчки даже это не поможет. Так как новая строчка существует только "внутри" DataGrid. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:39 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspНи как не пойму это у меня такое впечатление от нехватки знаний, или оно так и есть?есть такое, и пусть Shocker.Pro прыгает от злости. Это эксперимент MS и он всегда может от него отказаться. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:40 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123детский сад пенсионера не любящего модальных окон)Да я моложе вас всех вместе взятых! (С) От модальных окон я отказался по простой причине. Представь, что есть приложение, не хелловорлд, в нем запущено несколько окон на вкладках, к примеру журнал заказов, несколько заказов, карточка клиента и т.п. И одна из этих вкладок вызвала некий диалог. А юзеру чтобы корректно заполнить этот диалог необходимо заглянуть в другое окно, скажем, в журнал доставок. Или звонит клиент, нужно срочно пообщаться с ним по его заказу, а у тебя открыт модальный наполовину заполненный диалог. Так что модальность мешает и очень сильно. Диалог должен блокировать только тот компонент программы, из которого он вызван, а не все приложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:42 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123есть такое, и пусть Shocker.Pro прыгает от злости. Это эксперимент MS и он всегда может от него отказаться.Есть мнение, что WPF закончен к версии 4.0. В 4.5 были лишь косметические изменения, по сравнению с предыдущими версиями. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:44 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspМне где-то попадалась (не могу найти сейчас) статья о том, как DG вносит изменения в источник. И там было объяснено, что у DG есть какое-то внутреннее представление или буфер для данных. И изменения происходят там. По умолчанию данные скидываются в источник при выходе (потере фокуса) из строки. Можно изменить на скидывание по выходу из ячейки. С новой строкой - только по выходу из строки. Я не помню как точно - но там было название этого механизма. И транзакцией я его назвал не правильно, просто не смог найти правильного названия.это наверно dataSet. Но тут WPF уже по другому. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:46 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld Hasp, это не буфер, а так называемое представление коллекции (ICollectionView) для списочных типов используется ListCollectionView, именно там реализован интерфейс IEditableCollectionViewAddNewItem добавление элементов в источник. Который и поддерживается в DataGrid. Для любой коллекции в рамках потока существует представление коллекции по умолчанию, через которое работает DataGrid, если источником является класс наследующий IEnumerable, но если создать собственный экземпляр представления и связать его с ItemSource, то будет использоваться именно он. Представление коллекции так же реализует сортировку, фильтрацию списка, синхронизацию текущего элемента, навигацию и другой функционал. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:51 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman MejtesEld Hasp, это не буфер, а так называемое представление коллекции (ICollectionView) для списочных типов используется ListCollectionView, именно там реализован интерфейс IEditableCollectionViewAddNewItem добавление элементов в источник. Который и поддерживается в DataGrid. Для любой коллекции в рамках потока существует представление коллекции по умолчанию, через которое работает DataGrid, если источником является класс наследующий IEnumerable, но если создать собственный экземпляр представления и связать его с ItemSource, то будет использоваться именно он. Представление коллекции так же реализует сортировку, фильтрацию списка, синхронизацию текущего элемента, навигацию и другой функционал.Так как "выловить" изменение ячейки до выхода из неё? И как быть с новой строкой? Можно ли сделать что-то с этим? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 18:58 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspТак как "выловить" изменение ячейки до выхода из неё?на ввод каждой буквы. Тебе зачем? Сохраняется запись целиком. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:05 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman MejtesЕсть еще вариант ListView, он более легковесный.+1. Но автор молчит на предложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:12 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123на ввод каждой буквы. Тебе зачем? Сохраняется запись целиком.Если ты не встречался с юзеркейсом, это не значит, что его не существует ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:14 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Shocker.ProЕсть мнение, что WPFОК. Пару лет понаблюдаем. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:14 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:15 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspТак как "выловить" изменение ячейки до выхода из неё?на ввод каждой буквы. Тебе зачем? Сохраняется запись целиком.Допустим, пользователь отредактировал только одну только одну ячейку DataGrid (Изменил номер телефона, например). Больше ему ни чего менять не надо. Хочет сохранить. Но кнопка "Сохранить" не активна, так как пользователь ещё не вышел из ячейки. Конечно, можно сделать кнопку всегда активной. А сохранять только если были изменения. Можно сказать пользователю - "Сначала нажмите Enter" и т.д. Но интересно добиться всё таки желаемого. Хотя бы с познавательной точки зрения. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:17 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Shocker.ProЕсли ты не встречался с юзеркейсом, это не значит, что его не существуетплохо видно к чему это. Запись в табле это обычно сущность. А сущность частями не сохраняется. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:18 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspНо кнопка "Сохранить" не активна, так как пользователь ещё не вышел из ячейки.не понял. Должна быть активной на вход в редактирование или на ввод одной буквы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:20 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Roman MejtesЕсть еще вариант ListView, он более легковесный.+1. Но автор молчит на предложение.Я не молчу, а обдумываю. Как быть с новой строкой? Просто явно её добавлять в коллекцию? Коллекцию настроить так, чтобы в ней всегда была одна пустая строка? Кстати, читал такой вариант для DataGrid. Выловить событие начала редактирования новой строки (PreparingCellForEdit) и по нему явно создать в коллекции новую строку. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:21 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspНо кнопка "Сохранить" не активна, так как пользователь ещё не вышел из ячейки.не понял. Должна быть активной на вход в редактирование или на ввод одной буквы.До редактирования кнопка "Сохранить" не активна. При любых изменениях становится активной. Желательно, чтобы изменения "ловились" сразу, до выхода из первой ячейки. Так как иначе создаются неудобства в случае редактирования только одной ячейки - а это будет один из частых используемых способов. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:25 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspPetro123пропущено... не понял. Должна быть активной на вход в редактирование или на ввод одной буквы.До редактирования кнопка "Сохранить" не активна. При любых изменениях становится активной. Желательно, чтобы изменения "ловились" сразу, до выхода из первой ячейки. Так как иначе создаются неудобства в случае редактирования только одной ячейки - а это будет один из частых используемых способов.я же сказал, событие ввода буквы. А не выход. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:28 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspКак быть с новой строкой? DataGridTest.Items.Add( Было? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:33 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspКак быть с новой строкой? DataGridTest.Items.Add( Было?Кури внимательно то, что написал Роман. Нет никакого Add ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:35 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld Haspпропущено... До редактирования кнопка "Сохранить" не активна. При любых изменениях становится активной. Желательно, чтобы изменения "ловились" сразу, до выхода из первой ячейки. Так как иначе создаются неудобства в случае редактирования только одной ячейки - а это будет один из частых используемых способов.я же сказал, событие ввода буквы. А не выход.Да, при изменении любого символа, даже если не было выхода. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:35 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspКак быть с новой строкой? DataGridTest.Items.Add( Было?Нет. Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст? Или Вы что-то другое имели ввиду? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:38 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspRoman MejtesEld Hasp, это не буфер, а так называемое представление коллекции (ICollectionView) для списочных типов используется ListCollectionView, именно там реализован интерфейс IEditableCollectionViewAddNewItem добавление элементов в источник. Который и поддерживается в DataGrid. Для любой коллекции в рамках потока существует представление коллекции по умолчанию, через которое работает DataGrid, если источником является класс наследующий IEnumerable, но если создать собственный экземпляр представления и связать его с ItemSource, то будет использоваться именно он. Представление коллекции так же реализует сортировку, фильтрацию списка, синхронизацию текущего элемента, навигацию и другой функционал.Так как "выловить" изменение ячейки до выхода из неё? И как быть с новой строкой? Можно ли сделать что-то с этим? редактируемая ячейка существует только во View, механизм там просто, извлекается значение ячейки, создается ячейка с TextBox, этому TextBox присваивается это значение, а когда вы завершаете редактирование, значение передается в источник. То есть, пока редактирование не завершится, то есть редактируемая ячейка не закроется, получить значение будет довольно геморойно и не особо нужно. Код: c# 1. 2. 3. 4. 5. 6. 7.
интерфейс IEditableObject позволит обрабатывать события начала, завершения и отмены редактирования в самом редактируемом объекте модели представления Код: 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.
Так же можно отслеживать состояния представления коллекции, примерно следующим образом Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:38 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspНо если источник прибинден к ItemsSource разве Items.Add исключение не выдаст?проверь. Я удивлюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:40 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
естественно, создавай свой ListCollectionView, именно его и нужно передавать как источник элементов в свойство ItemSource ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:40 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspНет. Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст? Или Вы что-то другое имели ввиду?был ли топикстартеру полезен хотя бы один пост Петро? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:43 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Shocker.ProEld HaspНет. Но если источник прибинден к ItemsSource разве Items.Add исключение не выдаст? Или Вы что-то другое имели ввиду?был ли топикстартеру полезен хотя бы один пост Петро?партсобрание? Был ли полезен хоть один твой пост? Или ты из группы поддержки? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:46 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Мне жаль его время ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:49 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Shocker.ProМне жаль его время А мне жаль когды ты советуешь модифицировать грид) Почему и говорю - пенсионер. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 19:54 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman Mejtesинтерфейс IEditableObject позволит обрабатывать события начала, завершения и отмены редактирования в самом редактируемом объекте модели представления Спасибо за пример. Правильно я понял, что это ниже альтернатива, хотя и за деньги? Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 20:01 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspНо если источник прибинден к ItemsSource разве Items.Add исключение не выдаст?проверь. Я удивлюсь.Проверил - исключение. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 20:34 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman Mejtesестественно, создавай свой ListCollectionView, именно его и нужно передавать как источник элементов в свойство ItemSourceНе совсем понял пример. ipc.PropertyChanged += ICV_PropertyChanged; private void IECVANI_PropertyChanged(object sender, PropertyChangedEventArgs e) Это описка или речь о разных обработчиках? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 20:47 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman MejtesEld Haspпропущено... Так как "выловить" изменение ячейки до выхода из неё? И как быть с новой строкой? Можно ли сделать что-то с этим? редактируемая ячейка существует только во View, механизм там просто, извлекается значение ячейки, создается ячейка с TextBox, этому TextBox присваивается это значение, а когда вы завершаете редактирование, значение передается в источник. То есть, пока редактирование не завершится, то есть редактируемая ячейка не закроется, получить значение будет довольно геморойно и не особо нужно.То что геморройно я понял.... Вот такие мелки нюансы в WPF, превращающиеся в геморрой, и удивляют... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 20:51 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Eld HaspПроверил - исключение. хмм. )) насколько я понял эту фичу которую нужно было зазубрить а не логикой понять. Добавлять нужно в Модели\Коллекции. А изменения вверх к гриду придут. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 23:04 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Eld HaspПроверил - исключение. хмм. )) насколько я понял эту фичу которую нужно было зазубрить а не логикой понять. Добавлять нужно в Модели\Коллекции. А изменения вверх к гриду придут.Да, я за это и писал. Если идёт привязка ItemsSource, то изменять надо привязанную коллекцию, а не сам элемент. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 23:52 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
То что геморройно я понял.... Вот такие мелки нюансы в WPF, превращающиеся в геморрой, и удивляют...не знаю, я не вижу никакого геморроя, я вижу огромный горизонт применения представления коллекций. по сути это прослойка между View и ViewModel, позволяющая синхронизировать View и ViewMode в плане коллекций, но не только это. Просто вы плохо еще знакомы с WPF, по этому все кажется сложным, не логичным, когда освоитесь, будет значительно проще. "Магия" декларативного программирования WPF имеет тёмную сторону, если вы плохо понимаете как устроена эта "магия", тяжело, что то реализовать. Разберитесь с основами WPF, иерархией классов, как устроенно связывание, макетирование, маршрутизация событий, векторная графика и аффинные (матричные) преобразования, диспатчер и приоритеты, свойства зависимости и присоединяемые свойства, анимация, триггеры и менеджер состояний, типы ресурсов и чем они отличаются (Dynamic\Static). В книгах найдете ответы, на все эти вопросы. Вот лично я вкусив все прелести WPF когда открываю WF проекты, чувствую как снизу печёт =) мне кажется, что я из рая, вернулся в АД, добавить функционал в элемент управления, особенно не свой, это геморой, codebehind файлы по 5000 строк, горите в АДу :) Petro123, изменять нужно не в коллекции, а её представлении, а после подтверждения Commit'а добавлять элемент в модель представления. В модели представления механизм синхронизации зависит от модели. Либо сразу изменения применяются, либо ко команде Save, либо еще как. На самом деле, ListBox можно заполнить элементами, при этом в модели и модели представления никаких элементов не будет, все они будут "виртуальными", не материализованными даже на уровне VM. Представление коллекции позволяет на уровне View или ViewModel отобразить коллекцию в том виде, в каком требуется, не меняя самой коллекции модели. ListCollectionView позволяет добавить только 1 элемент и только в начало или конец, но этот функционал можно расширить. Допустим с помощью представления коллекции можно отобразим дерево элементов, отображаться будут только те элементы, родитель которых имеет свойство IsExpanded. Под каждым кустом можно добавить элемент создания дочерних элементов. При этом, если делать это в DataGrid, а вед в нём не обязательны ячейки, можно оставить только строки :D вы получите дерево, если колонки будут, то дерево с колонками и ячейками. Обернем в шаблоне ItemsPresenter в Popup окно, добавим ToggleButton и получаем ComboBox с деревом, мультиселектом, колонками, сортировкой, фильтрацией, генерацией, редактированием, виртуализацией, синхронизацией и т.д. И по сути, это всё из коробки, собственный код, это только ViewModel, ICollectionView и шаблон элемента, который я могу использовать для любых коллекций, даже без учёта иерархии. И самый сок в том, что выглядеть это может так как хочет дизайнер, а не как хочет система. Вот за это я и люблю WPF. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2018, 23:56 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman MejtesТо что геморройно я понял.... Вот такие мелки нюансы в WPF, превращающиеся в геморрой, и удивляют...не знаю, я не вижу никакого геморроя, я вижу огромный горизонт применения ......... Вот за это я и люблю WPF.Может я к вам присоединюсь, когда у меня будет 10-я частью Ваших знаний. Но пока ..... Всё так сложно. Пытаюсь учиться, читать, но как-то всё сложно, запутано. Ни как структура всего этого в голове не уложиться. Может литература не та попадается, а может .... голова не та... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 00:41 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman Mejtes, Это круто конечно. Но много крутых задумок закончились ничем, т.к. Кастомизация или допиливание представления нужно в одном из тысячи проектов. Прокомментируй подход телерика что я выше привел. Верно что ты привел один вариант, а у телерика второй? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 07:12 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123Roman Mejtes, Это круто конечно. Но много крутых задумок закончились ничем, т.к. Кастомизация или допиливание представления нужно в одном из тысячи проектов. Прокомментируй подход телерика что я выше привел. Верно что ты привел один вариант, а у телерика второй?не знаю, не знаю, у меня это обычно в любом проекте. Так как дизайн обычно "дизайнерский", а интерфейс сложнее блокнота. да и практически любые списки делаю через декораторы, так как мне удобнее хранить состояния выделения и другие состояния в декораторе, а не классах модели представления ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 11:17 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman Mejtesне знаю, не знаю, у меня это обычно в любом проекте. Странно. Грид девок или телерик позволяет настроить в широких пределах даже джуну. НЕ имея твоей квалификации. Интересно конкретнее про ГУИ, если есть желание. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 11:44 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Petro123, я почти не юзал телериковский грид. но в свое время искали SpreedSheet для решения одной задачи и самый прикол в том, что я из всех представленных (Telerik, ComponentOne и другие) я не нашел не одного адекватного, во всех вариантах я находил кучи блокирующих багов и практически все тормозили :( (это не антиреклама, возможно за эти 2 года всё стало лучше) Но вообще, я только за, если в проекте есть платные компоненты, ведь по факту мне работы меньше, если конечно они подходят для поставленных задач. по конкретным GUI, не очень понял вопрос, что интересует конкретно? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 11:55 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman Mejtesпо конкретным GUI, не очень понял вопрос, что интересует конкретно?выше писал как в телерике подписываться на начало редактирования. Твое мнение? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 12:08 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
а как из модели подписаться на события во View и зачем это нужно? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 16:28 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman Mejtesа как из модели подписаться на события во View и зачем это нужно?если ты про мой вопрос, то... Паттерн MVVM. В классе ViewModel делаем boolean properties IsEdit. Т.е. Кнопку сохранить биндим на свойство. А вот кол выше передает событие начала редактирования в метод рядом тут же чтобы взводить это свойство. Выходить 3 строки кода. Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2018, 16:49 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
привязать кнопку с свойству? у вас всё сводится, почему то к тому, что чем меньше кода, тем лучше. Но это заблуждение с вашей стороны ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 10:16 |
|
Отслеживание изменений в DataGrid
|
|||
---|---|---|---|
#18+
Roman Mejtesпривязать кнопку с свойству? у вас всё сводится, почему то к тому, что чем меньше кода, тем лучше. Но это заблуждение с вашей стороныаргументируй. Не только меньше кода. Джуны ругаются на сложность))) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.11.2018, 10:33 |
|
|
start [/forum/topic.php?all=1&fid=21&tid=1440380]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
100ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 213ms |
0 / 0 |