powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF, MVVM, отмена выделения строки в DataGrid
5 сообщений из 5, страница 1 из 1
WPF, MVVM, отмена выделения строки в DataGrid
    #39044007
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

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

Помогите, пожалуйста, решить проблему. Есть view, на ней расположен DataGrid. Свойство ItemsSource связано биндингом со свойством viewModel, свойства SelectedItem связано биндингом со свойством viewModel. На DataGrid список элементов. Для текущего выделенного элемента отображается подробная информация, элемент можно редактировать. Пользователь редактирует текущий элемент, не нажимает кнопку сохранить и переходит с другому элементу в DataGrid. В этом момент выводится диалог, были внесены изменения, что делать? Сохранить изменения, отменить изменения, продолжить редактирование. Если пользователь нажимает продолжить редактирование или при попытке сохранить или отменить изменения выдается ошибка, то необходимо в гриде не переходить к другому элементу, а остаться на текущем. На уровне viewModel остаться на текущем элементе не сложно, но в DataGrid, на уровне view, все равно всегда выделение переходит на новый элемент, к которому пытался перейти пользователь. Подскажите, как отменить на уровне view новое выделение, переход к другому элементу в DataGrid при определенных условиях?я такого не делал, но попробуй сделать так.
Создай 2а AttachedProperty. 1 Привяжи с viewModel, 2 к SelectedItem DataGrid через Binding.
Затем, если изменилось свойство SelectedItem, ты выдаешь диалоговое окно, если нажать Cancel, ты вернешь его значению из viewModel, если Ok, то сохранишь его в viewModel'е. Если изменилось AttachedProperty связанное с viewModel, ты меняешь свойство связанное с SelectedItem, если оно было изменено до этого на шаге 1, то ни чего не произойдет. Зацикливания не будет.
Удачи.
...
Рейтинг: 0 / 0
WPF, MVVM, отмена выделения строки в DataGrid
    #39044296
Oleg5555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman MejtesOleg5555Добрый день!

Помогите, пожалуйста, решить проблему. Есть view, на ней расположен DataGrid. Свойство ItemsSource связано биндингом со свойством viewModel, свойства SelectedItem связано биндингом со свойством viewModel. На DataGrid список элементов. Для текущего выделенного элемента отображается подробная информация, элемент можно редактировать. Пользователь редактирует текущий элемент, не нажимает кнопку сохранить и переходит с другому элементу в DataGrid. В этом момент выводится диалог, были внесены изменения, что делать? Сохранить изменения, отменить изменения, продолжить редактирование. Если пользователь нажимает продолжить редактирование или при попытке сохранить или отменить изменения выдается ошибка, то необходимо в гриде не переходить к другому элементу, а остаться на текущем. На уровне viewModel остаться на текущем элементе не сложно, но в DataGrid, на уровне view, все равно всегда выделение переходит на новый элемент, к которому пытался перейти пользователь. Подскажите, как отменить на уровне view новое выделение, переход к другому элементу в DataGrid при определенных условиях?я такого не делал, но попробуй сделать так.
Создай 2а AttachedProperty. 1 Привяжи с viewModel, 2 к SelectedItem DataGrid через Binding.
Затем, если изменилось свойство SelectedItem, ты выдаешь диалоговое окно, если нажать Cancel, ты вернешь его значению из viewModel, если Ok, то сохранишь его в viewModel'е. Если изменилось AttachedProperty связанное с viewModel, ты меняешь свойство связанное с SelectedItem, если оно было изменено до этого на шаге 1, то ни чего не произойдет. Зацикливания не будет.
Удачи.

Не совсем понял, что вы имеете ввиду. Можно немного подробнее? Сделать два AttachedProperty. Имеется виду к классу viewModel присоединить два свойства? Как эти свойства должны взаимодействовать другу с другом?

Я думаю, что это может не помочь. Не проблема где-то сохранять предыдущий элемент в выделении DataGrid на уровне ViewModel и при определенных условиях восстанавливаться из него. Или вообще не производить установку этого элемента. Проблема в следующем: если пользователь кликнул по какой-то строке, а предыдущая не была сохранена, выводится диалог, пользователь нажимает отмена, на уровне ViewModel текущий элемент не обновляется, подробная информация выводится о предыдущем элементе. Но в DataGrid все равно подсвечивается новая строка. Как сделать, чтобы выделение в DataGrid не менялось в этом случае?
...
Рейтинг: 0 / 0
WPF, MVVM, отмена выделения строки в DataGrid
    #39044355
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AttachedProperty это свойства модели View,
СвойствоА
СвойствоБ

СвойствоА биндится к SelectedItem DataGrid'а {Binding SelectedItem, RelativeSource={RelativeSource Self}}
СвойствоБ биндится к viewModel, через {Binding ВыделенныйЭлемент}
в классе где вы создадите эти AttachedProperty, будут 2 метода, для обработки изменения свойства зависимости. В них вы опишите логику изменений. Свойство SelectedItem должно быть зарегано как TwoWay или в Binding'е это явно указывать
...
Рейтинг: 0 / 0
WPF, MVVM, отмена выделения строки в DataGrid
    #39047439
Супер_Пав
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtes, там выделение происходит по клику. Биндинги тут не при чем. Грид устроен так, что по клику идет выделение.
Я вижу 2 решения: стили переписывать, но я пока не знаю как, там вникать надо; закрыть глаза на MVVM, паттерны хорошо, но еще лучше, когда не приходится извращаться, а пишешь легкий читаемый код. В этом случает можно попробовать через такой код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
private void dataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var grid = sender as DataGrid;
    if (grid == null || e.RemovedItems.Count == 0) return;
            
    grid.SelectionChanged -= dataGrid_SelectionChanged;
    var operation = grid.Dispatcher.BeginInvoke(new Action(() =>
    {
        grid.SelectedItem = e.RemovedItems[0];
    }),
    System.Windows.Threading.DispatcherPriority.ContextIdle);
    operation.Completed += ((s, ea) => grid.SelectionChanged += dataGrid_SelectionChanged);
}


Проверки сам воткни, какие надо.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / WPF, MVVM, отмена выделения строки в DataGrid
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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