|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
Коллеги, добрый день начинаю осваивать связку WPF и EF. возникла такая трудность. возможно задача довольно банальная, но решения я пока не нашел в гуи приложения есть датагрид и набор текстбоксов и др. - редактор данных. также кнопки Создать, Обновить, Удалить. все просто! текстбоксы прибиндены к выделенной строке в гриде. т.е. пользователь выделяет строку в гриде - заполняются поля редактора, далее пользователь может в них что-то изменить. и потом при нажатии на Создать, будет создана новая сущность и добавлена в базу, либо Обновить - обновится в базе существующая сущность. Вопрос в том как прибиндить контролы к двум объектам, чтобы при изменении в них значений - менялись свойства и нового объекта, и существующего (выделенного) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 09:06 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
немного поясню. во всех просмотренных аналогичных примерах работа происходит так: выделяется строка в гриде, далее редактируются поля редактора и обновление в базе происходит либо сразу при изменении, либо по нажатию какой-либо кнопки. а вот для создания новой записи бд по нажатию кнопки поля редактора сначала очищаются - при этом создается новый объект, а потом заполняются данными. и заносится в бд. у меня же после выделения строки и редактирования полей заранее неизвестно, что будет делать пользователь - изменять существующую запись, либо захочет новую создать. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.05.2014, 23:54 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
Но пользователь же должен как-то определиться - новую или существующую? Значит, это будут либо две кнопки, либо два разных нажатия на клавиатуре. Вот и биндть разные команды (или что там у тебя) на разные действия. Т. е. юзер редактирует существующую строку, а затем выбирает действие - новую создать или существующую изменить. Когда юзер редактирует существующую, ты её выделяешь в отдельный объект и юзер редактирует на самом деле копию. Потом копия либо заменяет старую, либо вставляется как новая. Это как вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2014, 10:32 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
Зачем ты хочешь позвоить юзеру вставить старую отредактированную запись как новую? Наверняка, для удобства - чтобы юзер не заполнял заново одинаковые поля. Тогда у тебя примерно та же байда, что и у меня . Там много воды, но в конце мы договорились до некоего решения. Суть его - если старый объект вставляется как новый, то старый объект копируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2014, 10:37 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
У меня копирование сделано в виде расширения для типа Object, который является базовым для всех ссылочных типов. Для типов-начений можно обычным MemberwiseClone пользоваться. Расширение просто сериализует объект в бинарный формат и затем десериализует его: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
Осталось только расставить в твоём типе атрибуты сериализации. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.05.2014, 10:43 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
поскольку мне нужно копировать только все свойства объекта, редактируемые пользователем, то я решил использовать их атрибуты Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
но теперь у меня другая проблема появилась. раньше я биндил контролы редактора к выделенной в гриде строке. но тогда получается, как только редактируешь контролы - меняется и строка в гриде сразу же. мне это не надо. как организовать, чтобы контролы биндились к свойствам объектам, который создается при смене строки. поясню. DataContext окна есть некий MyViewModel (реализующий INotifyPropertyChanged) у датагрида: Код: xml 1.
и тогда логично, что все контролы нужно прибиндить к соответствующим свойствам этого MySelectedEntity. пробую например так Код: xml 1. 2.
не работает. во всех примерах встречал, что нужно во ViewModel прописывать отдельно все свойства из объекта ентити. но как-то не комильфо. их куча. есть ли проще способ? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 01:52 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
Выдели отдельный объект для редактирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 05:01 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
Например. Вытаскиваем из источника выбранный для редактирования объект (модель) в отдельную вью модель и вью. Редактируем. Возвращаем в источник. Источник же прибинден к датагриду? - Тогда датагрид обновит своё содержимое, чтобы изменения источника отобразились. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 05:04 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
а что значит вытаскиваем в отдельную вью-модель? ведь в объект MySelectedEntity уже реализован INotifyPropertyChanged. почему тогда я просто не могу для грида, в котором накиданы все контролы редактора, указать DataContext = MySelectedEntity. и биндить к контролам свойства объекта(например, Descr) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 18:11 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
внезапно! нашел свой косяк в коде. во вью-модель, в сеттере MySelectedEntity не вызывался OnPropertyChanged. теперь все заработало. видимо, получится без дополнительных Вью и ВьюМоделей ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 18:40 |
|
WPF + EF биндинг к текстбоксу
|
|||
---|---|---|---|
#18+
авторведь в объект MySelectedEntity уже реализован INotifyPropertyChanged. почему тогда я просто не могу для грида, в котором накиданы все контролы редактора, указать DataContext = MySelectedEntity. и биндить к контролам свойства объекта(например, Descr) А, у тебя уже есть отдельный объект для редактирования. Что-то я пропустил... Ну байндь тогда. авторво всех примерах встречал, что нужно во ViewModel прописывать отдельно все свойства из объекта ентити. но как-то не комильфо. их куча. есть ли проще способ? А по-другому это как? Ты можешь прибайндить сразу объект EF к контролам. А можешь сделать промежуточную вью модель. Но модель же как-то должна устанавливать свой свойства? Покажи код этой модели. Прописывай во вью модели только те свойства из объекта энтити, которые тебе нужны. И байндь ко вью только их, соответсвтенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2014, 18:48 |
|
|
start [/forum/topic.php?fid=21&tid=1441127]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
140ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
others: | 11ms |
total: | 237ms |
0 / 0 |