![]() |
|
Модераторы: gambit, Kefir, Partizan |
![]()
|
|
| Ronin08 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
Доброго времени суток.
Допустим В БД имеется 2 табл. 1-Vendor(VendorId, Name) 2-Application(AppId, Name, VendorId(ссылка на Vendor.VendorId)) Я использую Entity Framework В приложении WPF имеется textbox забинденый на Application.Name и combobox забинденный на Vendor.Name нужно чтобы в combobox выделялась запись соответствующая Application.VendorId
Это сообщение отредактировал(а) Ronin08 - 18.6.2011, 00:00 --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
||||
|
|||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
SelectedValue -> http://msdn.microsoft.com/en-us/library/sy...ectedvalue.aspx
|
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
Kefir, я понимаю, что SelectedValue, просто во всех примерах что я видел работают с одной коллекций, например в той ссылке что ты дал есть только коллекция Employee.
В моем случае есть две коллекции Applications и Vendors. Надо для текущего Applications.VendorId выбрать (SelectedValue) запись из Vendors.VendorId --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Я не сильно разбирался в твоих биндингах и подобном, но забинди примерно так:
|
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
Kefir, спасибо за ответ, но не так .
это не верно. nameTextBox здесь не причем. к nameTextBox биндится Application.Name, а связывать надо по Application.VendorId например, должно быть так: в nameTextBox.Text у меня "Photoshop" а в cbxVendorName есть такие записи: Microsoft; Mozilla; Adobe; Kaspersky Lab; значит cbxVendorName.SelectedValue должно быть "Adobe". --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Ronin08, задачи такого типа хорошо решаются у ViewModel паттерна MVVM
|
|||
|
||||
| Rohoss |
|
||||||||||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Прикрепил решение. Однако тут я сделал на примере обычных коллекций, но думаю с EF будет тоже самое. Для использования шаблона MVVM я не использовал никаких тулкитов а просто создал класс MainWindowViewModel и реализовал в нём интерфейс INotifyPropertyChanged. В результате, что мы имеем:
Три класса данных TableApplication
TableVendor
И наш новый тип GeneratedTable
Так же создана наша модель представления. Здесь находится логика поведения нашего окна MainWindowViewModel
Ну и биндим свойства нашей модели представления к окну
Вот и всё Присоединённый файл ( Кол-во скачиваний: 3 )
WpfApplication5.zip 78,66 Kb |
||||||||||
|
|||||||||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Ronin08, что-то у нас с тобой понимания никак нет. Раз ты привязываешь текст текстбокса к Name, значит датаконтекст у текстбокса содержит Application, не? Значит можно привязаться к DataContext.VendorId.
|
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
все верно, но разве таким способом Combobox узнает, что надо установить SelectedValue = Application.VendorId? В общем так не работает Rohoss, так я делал, но это не то! В твоем примере в комбобоксе получается записей столько сколько в списке List<TableApplication>, т.е. в комбобоксе мы видим Microsoft Microsoft Mozilla Adobe Kaspersky Lab Kaspersky Lab а должно быть: Microsoft Mozilla Adobe Kaspersky Lab --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Ну уж извини, но как ты себе это представляешь? Если в таком случае ты выберешь вендора, то какой по твоему продукт должен отображаться, если их несколько на одного вендора? В таком случае логично делать не текст бокс для имени приложения, а лист бокс.
|
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
Возможно я не точно выразился
здесь я подрозумевал, то что combobox это контрол для выбора Vendor для текущего Application, а не на оборот. Например, по ошибке для Application c Name="MS Windows" стоит вендор "Kaspersky Lab". Я открываю диалог редактирования Application там есть combobox c записями Microsoft Mozilla Adobe Kaspersky Lab у устаноленным SelectedValue на "Kaspersky Lab", я меняю на Microsoft и у нас в Application.VendorId усанавливается новое значение вендора. --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
В таком случае в чём вообще проблема? Биндь комбо бокс к таблице с вендорами!
Добавлено @ 15:55 Ronin08, я так понимаю, ты сам не знаешь чего хочешь? Мне кажется, в твоём случае, было бы целесообразно сделать так: две таблицы: приложений и вендоров. два комбобокса, к одному биндится таблица приложений, к другому вендоры. Внизу лисбокс со списком всех приложений и вендоров. логика такая: ты выбираешь приложение(в комбобоксе), в другом выбираешь вендора. Есть кнопка, при нажатии на которую вендор у приложения изменится(станет таким как в комбобоксе списка вендоров), и в результате также изменится его представление в листбоксе. Это твой случай? Если да, то мне сложно понять с какого боку там делает текстовое поле. Или ты предлагаешь название приложения туда вручную вводить? Это сообщение отредактировал(а) Rohoss - 19.6.2011, 15:56 |
|||
|
||||
| Ronin08 |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
Rohoss, еще из моего вопроса(1- сообщение в этой теме) видно, что я так и делаю, но не знаю как правильно указать SelectedValue, чтобы он привязывался к Application.VendorId
Знаю. Это стандартная логика, когда одно из свойств объекта мы можем выбрать из списка возможных свойств. Просто я хочу чтобы везде где возможно делать привязку данных в xaml. Это все элементарно делается в коде, просто намного больше писанины, да и вообще хочется разобраться. Это сообщение отредактировал(а) Ronin08 - 19.6.2011, 16:32 --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
||||||
|
|||||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Тогда ты не ответил на вопрос
|
|||
|
||||
| Ronin08 |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
Давай сначала. Я хочу добавить новое Application Открывается Окно, в нем есть Textbox и Combobox и Button В Textbox пишу "MS Exchange 2010" в Combobox выбираю из списка (1)Mozilla (2)Microsoft (3)Adobe (4)Kaspersky Lab нужную мне, т.е. "Microsoft" (здесь у меня уже есть объект Application {Name = "MS Exchange 2010", VendorId = 2} ) Нажимаю Button и эта запись сохраняется в базе! Потом, например, Microsoft продали MS Exchange 2010 Эдобу (мало ли) Тогда я открываю Application с Name = "MS Exchange 2010" в Combobox в данный момент выбрана запись "Microsoft", устанавливаю "Adobe". Здесь уже Application {Name = "MS Exchange 2010", VendorId = 3} ) Нажимаю Button и эта запись апдейтится в базе! --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
|||
|
||||
| Kefir |
|
|||
|
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 22 Всего: 87 |
Ronin08, SelectedValue биндится в обе стороны. Привяжи его у Application.VendorId который ты создаёшь и будет тебе счастье. Если же ты не можешь этого сделать - читай книжки и вникай что у тебя не так на пару с дебагером.
Следующий код работает (это как пример, биндится напрямую в текстбокс для наглядности):
|
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
Ronin08, посмотри аттач, возможно сделано так, как тебе и нужно
Присоединённый файл ( Кол-во скачиваний: 4 )
WpfApplication5.zip 111,92 Kb |
|||
|
||||
| Rohoss |
|
|||
![]() Начальник интернета ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1308 Регистрация: 9.10.2006 Где: Matrix Репутация: 4 Всего: 18 |
В примере я использовал MvvmLight.
Добавлено через 2 минуты и 38 секунд Был бы очень признателен, если бы кто-то из участников, хорошо понимающий паттерн MVVM сказал, правильно ли я его использую в данном примере, и может быть где-то использую криво. Это сообщение отредактировал(а) Rohoss - 19.6.2011, 19:24 |
|||
|
||||
| Ronin08 |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 218 Регистрация: 16.2.2008 Где: г.Москва Репутация: нет Всего: 1 |
Всем спасибо, разобрался. Надо было просто сделать так, чтобы у combobox и textbox был один и тот же DataContext и у Combox.ItemsSource был
весь код
Это сообщение отредактировал(а) Ronin08 - 20.6.2011, 11:39 --------------------
Зачем вставать рано или поздно? Надо вставать вовремя |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | WPF и Silverlight | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |