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

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

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

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

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

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

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

Если хочешь, что бы стили выделения был одинаковы, переопредели на свои.
...
Рейтинг: 0 / 0
07.09.2015, 20:31
    #39045301
Oleg5555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF, MVVM, отмена выделения строки в DataGrid
К сожалению, этот пример ни чем помочь не может. Менять текущий элемент в 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
07.09.2015, 20:33
    #39045302
Oleg5555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF, MVVM, отмена выделения строки в DataGrid
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
07.09.2015, 20:49
    #39045313
Oleg5555
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WPF, MVVM, отмена выделения строки в DataGrid
К сожалению, этот пример ни чем помочь не может. Менять текущий элемент в 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
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / WPF, MVVM, отмена выделения строки в DataGrid / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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