|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
Добрый день! Помогите, пожалуйста, решить проблему. Есть view, на ней расположен DataGrid. Свойство ItemsSource связано биндингом со свойством viewModel, свойства SelectedItem связано биндингом со свойством viewModel. На DataGrid список элементов. Для текущего выделенного элемента отображается подробная информация, элемент можно редактировать. Пользователь редактирует текущий элемент, не нажимает кнопку сохранить и переходит с другому элементу в DataGrid. В этом момент выводится диалог, были внесены изменения, что делать? Сохранить изменения, отменить изменения, продолжить редактирование. Если пользователь нажимает продолжить редактирование или при попытке сохранить или отменить изменения выдается ошибка, то необходимо в гриде не переходить к другому элементу, а остаться на текущем. На уровне viewModel остаться на текущем элементе не сложно, но в DataGrid, на уровне view, все равно всегда выделение переходит на новый элемент, к которому пытался перейти пользователь. Подскажите, как отменить на уровне view новое выделение, переход к другому элементу в DataGrid при определенных условиях? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2015, 16:43 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
Oleg5555, В viewModel создать свойство currentSelectItem и к нему забиндить selectItem dataGrid-a как mode.TwoWay. И если у пользователя ошибка при редактировании, то меняй свойство currentSelectItem на нужное. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2015, 20:13 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
Gul-79, Так можно поменять только элемент на уровне ViewModel. А выделение в DataGrid все равно переходит туда, куда кликнул пользователь. При таком решении подробно отображается предыдущий элемент, а в гриде все равно выделяется новый. Проблема как раз в том, как обменить выделение в DataGrid, на уровне View? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2015, 21:14 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
Oleg5555Gul-79, Так можно поменять только элемент на уровне ViewModel. А выделение в DataGrid все равно переходит туда, куда кликнул пользователь. При таком решении подробно отображается предыдущий элемент, а в гриде все равно выделяется новый. Проблема как раз в том, как обменить выделение в DataGrid, на уровне View? Вот посмотри пример . Если хочешь, что бы стили выделения был одинаковы, переопредели на свои. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2015, 11:20 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
К сожалению, этот пример ни чем помочь не может. Менять текущий элемент в DataGrid в коде ViewModel не проблема. Проблема в следующем. Вот одна из попыток представить свойство ViewModel привязанное к SelectedItem: Код: 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.
Или вот такой вариант: Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2015, 20:31 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
Oleg5555К сожалению, этот пример ни чем помочь не может. Менять текущий элемент в DataGrid в коде ViewModel не проблема. Проблема в следующем. Вот одна из попыток представить свойство ViewModel привязанное к SelectedItem: Код: 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.
Или вот такой вариант: Код: 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.
случайное опубликовал недоделанное сообщение ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2015, 20:33 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
К сожалению, этот пример ни чем помочь не может. Менять текущий элемент в DataGrid в коде ViewModel не проблема. Проблема в следующем. Вот одна из попыток представить свойство ViewModel привязанное к SelectedItem: Код: 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.
Или вот такой вариант: Код: 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.
И еще много разных вариантов, уже не помню. В методе this.CheckCurrentEntityState() выполняется проверка, если текущий элемент изменен или текущий элемент новый, выдается диалог. Были внесены изменения. Сохранить изменения? Отменить изменения? Продолжить редактирование? Если нажать сохранить или отменить выполняется соответствующая команда и если ошибок нет метод вернет истину, и происходит переход к новому элементу в списке, по которому кликнул пользователь. Если была ошибка при выполнении команд или пользователь нажал продолжить редактирование, то метод this.CheckCurrentEntityState() вернет ложь и элемент CurrentEntityGrid не меняется, остается прежним. Но в гриде выделяется новый элемент, по которому кликнул пользователь. Проблема в том, как в случае если метод this.CheckCurrentEntityState() вернул ложь, заставить не менять позицию выделения в DataGrid. Именно визуальную подсветку в интерфейсе. Потому что, как бы не произошло, при клике в DataGrid всегда выделяется стока по которой был клик. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.09.2015, 20:49 |
|
|
start [/forum/topic.php?fid=17&fpage=13&tid=1349500]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
72ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 169ms |
0 / 0 |