|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
Добрый день! Помогите, пожалуйста, решить проблему. Есть view, на ней расположен DataGrid. Свойство ItemsSource связано биндингом со свойством viewModel, свойства SelectedItem связано биндингом со свойством viewModel. На DataGrid список элементов. Для текущего выделенного элемента отображается подробная информация, элемент можно редактировать. Пользователь редактирует текущий элемент, не нажимает кнопку сохранить и переходит с другому элементу в DataGrid. В этом момент выводится диалог, были внесены изменения, что делать? Сохранить изменения, отменить изменения, продолжить редактирование. Если пользователь нажимает продолжить редактирование или при попытке сохранить или отменить изменения выдается ошибка, то необходимо в гриде не переходить к другому элементу, а остаться на текущем. На уровне viewModel остаться на текущем элементе не сложно, но в DataGrid, на уровне view, все равно всегда выделение переходит на новый элемент, к которому пытался перейти пользователь. Подскажите, как отменить на уровне view новое выделение, переход к другому элементу в DataGrid при определенных условиях? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2015, 16:53 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
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, то ни чего не произойдет. Зацикливания не будет. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.09.2015, 21:03 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
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 не менялось в этом случае? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2015, 16:30 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
AttachedProperty это свойства модели View, СвойствоА СвойствоБ СвойствоА биндится к SelectedItem DataGrid'а {Binding SelectedItem, RelativeSource={RelativeSource Self}} СвойствоБ биндится к viewModel, через {Binding ВыделенныйЭлемент} в классе где вы создадите эти AttachedProperty, будут 2 метода, для обработки изменения свойства зависимости. В них вы опишите логику изменений. Свойство SelectedItem должно быть зарегано как TwoWay или в Binding'е это явно указывать ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2015, 19:03 |
|
WPF, MVVM, отмена выделения строки в DataGrid
|
|||
---|---|---|---|
#18+
Roman Mejtes, там выделение происходит по клику. Биндинги тут не при чем. Грид устроен так, что по клику идет выделение. Я вижу 2 решения: стили переписывать, но я пока не знаю как, там вникать надо; закрыть глаза на MVVM, паттерны хорошо, но еще лучше, когда не приходится извращаться, а пишешь легкий читаемый код. В этом случает можно попробовать через такой код: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Проверки сам воткни, какие надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.09.2015, 20:03 |
|
|
start [/forum/topic.php?fid=21&msg=39044071&tid=1440809]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
133ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 240ms |
0 / 0 |