powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / WPF, MVVM, отмена выделения строки в DataGrid
7 сообщений из 7, страница 1 из 1
WPF, MVVM, отмена выделения строки в DataGrid
    #39044001
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Помогите, пожалуйста, решить проблему. Есть view, на ней расположен DataGrid. Свойство ItemsSource связано биндингом со свойством viewModel, свойства SelectedItem связано биндингом со свойством viewModel. На DataGrid список элементов. Для текущего выделенного элемента отображается подробная информация, элемент можно редактировать. Пользователь редактирует текущий элемент, не нажимает кнопку сохранить и переходит с другому элементу в DataGrid. В этом момент выводится диалог, были внесены изменения, что делать? Сохранить изменения, отменить изменения, продолжить редактирование. Если пользователь нажимает продолжить редактирование или при попытке сохранить или отменить изменения выдается ошибка, то необходимо в гриде не переходить к другому элементу, а остаться на текущем. На уровне viewModel остаться на текущем элементе не сложно, но в DataGrid, на уровне view, все равно всегда выделение переходит на новый элемент, к которому пытался перейти пользователь. Подскажите, как отменить на уровне view новое выделение, переход к другому элементу в DataGrid при определенных условиях?
...
Рейтинг: 0 / 0
WPF, MVVM, отмена выделения строки в DataGrid
    #39044370
Gul-79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg5555,

В viewModel создать свойство currentSelectItem и к нему забиндить selectItem dataGrid-a как mode.TwoWay.

И если у пользователя ошибка при редактировании, то меняй свойство currentSelectItem на нужное.
...
Рейтинг: 0 / 0
WPF, MVVM, отмена выделения строки в DataGrid
    #39044411
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gul-79,

Так можно поменять только элемент на уровне ViewModel. А выделение в DataGrid все равно переходит туда, куда кликнул пользователь. При таком решении подробно отображается предыдущий элемент, а в гриде все равно выделяется новый. Проблема как раз в том, как обменить выделение в DataGrid, на уровне View?
...
Рейтинг: 0 / 0
WPF, MVVM, отмена выделения строки в DataGrid
    #39044707
Gul-79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Oleg5555Gul-79,

Так можно поменять только элемент на уровне ViewModel. А выделение в DataGrid все равно переходит туда, куда кликнул пользователь. При таком решении подробно отображается предыдущий элемент, а в гриде все равно выделяется новый. Проблема как раз в том, как обменить выделение в DataGrid, на уровне View?

Вот посмотри пример .

Если хочешь, что бы стили выделения был одинаковы, переопредели на свои.
...
Рейтинг: 0 / 0
WPF, MVVM, отмена выделения строки в DataGrid
    #39045301
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.
        private TDictionaryEntityViewModel _currentEntityGrid;

        public TDictionaryEntityViewModel CurrentEntityGrid
        {
            get
            {
                return this._currentEntityGrid;
            }

            set
            {
                if (this.CheckCurrentEntityState())
                {
                    this._currentEntityGrid = value;
                    this.OnPropertyChanged("CurrentEntityGrid");

                    this.CurrentEntity = value;
                }
                else
                {
                    this.OnPropertyChanged("CurrentEntityGrid");
                }
            }
        }



Или вот такой вариант:

Код: 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.
        private TDictionaryEntityViewModel _currentEntityGridLast;        

        private TDictionaryEntityViewModel _currentEntityGrid;

        public TDictionaryEntityViewModel CurrentEntityGrid
        {
            get
            {
                return this._currentEntityGrid;
            }

            set
            {
                

if (this.CheckCurrentEntityState())
                {
                    this._currentEntityGrid = value;
                    this.OnPropertyChanged("CurrentEntityGrid");

                    this.CurrentEntity = value;
                }
                else
                {
                    this.OnPropertyChanged("CurrentEntityGrid");
                }
            }
        }
...
Рейтинг: 0 / 0
WPF, MVVM, отмена выделения строки в DataGrid
    #39045302
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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.
        private TDictionaryEntityViewModel _currentEntityGrid;

        public TDictionaryEntityViewModel CurrentEntityGrid
        {
            get
            {
                return this._currentEntityGrid;
            }

            set
            {
                if (this.CheckCurrentEntityState())
                {
                    this._currentEntityGrid = value;
                    this.OnPropertyChanged("CurrentEntityGrid");

                    this.CurrentEntity = value;
                }
                else
                {
                    this.OnPropertyChanged("CurrentEntityGrid");
                }
            }
        }



Или вот такой вариант:

Код: 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.
        private TDictionaryEntityViewModel _currentEntityGridLast;        

        private TDictionaryEntityViewModel _currentEntityGrid;

        public TDictionaryEntityViewModel CurrentEntityGrid
        {
            get
            {
                return this._currentEntityGrid;
            }

            set
            {
                

if (this.CheckCurrentEntityState())
                {
                    this._currentEntityGrid = value;
                    this.OnPropertyChanged("CurrentEntityGrid");

                    this.CurrentEntity = value;
                }
                else
                {
                    this.OnPropertyChanged("CurrentEntityGrid");
                }
            }
        }



случайное опубликовал недоделанное сообщение
...
Рейтинг: 0 / 0
WPF, MVVM, отмена выделения строки в DataGrid
    #39045313
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.
        private TDictionaryEntityViewModel _currentEntityGrid;

        public TDictionaryEntityViewModel CurrentEntityGrid
        {
            get
            {
                return this._currentEntityGrid;
            }

            set
            {
                if (this.CheckCurrentEntityState())
                {
                    this._currentEntityGrid = value;
                    this.OnPropertyChanged("CurrentEntityGrid");

                    this.CurrentEntity = value;
                }
                else
                {
                    this.OnPropertyChanged("CurrentEntityGrid");
                }
            }
        }



Или вот такой вариант:

Код: 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.
        private TDictionaryEntityViewModel _currentEntityGridLast;
        
        private TDictionaryEntityViewModel _currentEntityGrid;

        public TDictionaryEntityViewModel CurrentEntityGrid
        {
            get
            {
                return this._currentEntityGrid;
            }

            set
            {
                this._currentEntityGridLast = this._currentEntityGrid;
                this._currentEntityGrid     = value;
                this.OnPropertyChanged("CurrentEntityGrid");

                if (this.CheckCurrentEntityState())
                {
                    this.CurrentEntity = value;
                }
                else
                {
                    this._currentEntityGrid = this._currentEntityGridLast;
                    this.OnPropertyChanged("CurrentEntityGrid");
                }
            }
        }



И еще много разных вариантов, уже не помню. В методе this.CheckCurrentEntityState() выполняется проверка, если текущий элемент изменен или текущий элемент новый, выдается диалог. Были внесены изменения. Сохранить изменения? Отменить изменения? Продолжить редактирование? Если нажать сохранить или отменить выполняется соответствующая команда и если ошибок нет метод вернет истину, и происходит переход к новому элементу в списке, по которому кликнул пользователь. Если была ошибка при выполнении команд или пользователь нажал продолжить редактирование, то метод this.CheckCurrentEntityState() вернет ложь и элемент CurrentEntityGrid не меняется, остается прежним. Но в гриде выделяется новый элемент, по которому кликнул пользователь. Проблема в том, как в случае если метод this.CheckCurrentEntityState() вернул ложь, заставить не менять позицию выделения в DataGrid. Именно визуальную подсветку в интерфейсе. Потому что, как бы не произошло, при клике в DataGrid всегда выделяется стока по которой был клик.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / WPF, MVVM, отмена выделения строки в DataGrid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]