Связывание объектов WPF ComboBox - не обновляется объект DataContext - PullRequest
0 голосов
/ 16 июня 2010

У меня есть следующий сценарий:

1 класс с именем «Widget» со свойствами: ID, код, описание
1 класс с именем «MyWidget» со свойством: m_Widget As Widget
1ComboBox

ComboBox имеет List (Of Widget), установленный в качестве ItemSource.

Я создаю экземпляр MyWidget с именем MyWidget1 и задаю значения свойств m_Widget, соответствующие одному изэлементы в «ComboBox List (Of Widget)».Затем я устанавливаю для DataContext ComboBox значение MyWidget1.Widget.

При изменении выбранного элемента ComboBox обновляется только свойство идентификатора MyWidget1.Widget ...

Как сделатьЯ получаю объект 'Widget' в 'MyWidget1', который будет обновлен, а не просто 'MyWidget1.Widget.ID'?

Вот ссылка на пример проекта, демонстрирующий этот сценарий:
http://www.webpersona.com/ObjectBinding.zip

Заранее спасибо за любую помощь:)


Обновление:

В файле: mwWindow.xaml

Я заменил:

<ComboBox
Name="Widgets_ComboBox"
Height="21"
Margin="5,5,5,0"
DisplayMemberPath="Description"
SelectedItem="Widget"
SelectedValue="{Binding Path=ID}"
SelectedValuePath="ID"/>

С:

<ComboBox
Name="Widgets_ComboBox"
Height="21"
Margin="5,5,5,0"
DisplayMemberPath="Description"
SelectedItem="Widget"
SelectedValue="{Binding Widget}"/>

В файле: Application.xaml.vb

Я заменил:

Public Sub ChangeSelectedMyWidget(ByVal sender As Object)
    Dim tmpWindow As mwWindow = CType(My.Application.MainWindow, mwWindow)
    My.Application.SelectedWidget = sender
    tmpWindow.Widgets_ComboBox.DataContext = My.Application.SelectedWidget.Widget
End Sub

С:

Public Sub ChangeSelectedMyWidget(ByVal sender As Object)
    Dim tmpWindow As mwWindow = CType(My.Application.MainWindow, mwWindow)
    My.Application.SelectedWidget = sender
    tmpWindow.Widgets_ComboBox.DataContext = My.Application.SelectedWidget
End Sub

И все равно не повезло.

Теперь после выбора прямоугольника он больше не выбирает правильно подобранный элемент в ComboBox.

В неотредактированномНапример, после выбора прямоугольника привязка выбирает правильно подобранный элемент в ComboBox, а затем, когда я изменяю выбор ComboBox, только идентификаторselected MyWidget.Widget обновляется.

Мне нужно именно это поведение, за исключением того, что обновляются все свойства MyWidget.Widget.

Я подозревал, что мне нужно связать объект Widget, а несвойство виджета ранее, но я не смог заставить его работать, поэтому я думаю, что вы правы в своем ответе, но мне кажется, что я все еще что-то упускаю.

Кроме того, спасибо затвоя помощь, Рэй.;)

1 Ответ

2 голосов
/ 16 июня 2010

Вот ваша проблема:

SelectedValue="{Binding Path=ID}"
SelectedValuePath="ID"

Это означает, что ComboBox должен обновлять значение идентификатора, а не сам виджет.

Замените его следующим:

SelectedValue="{Binding Widget}"

и установите для DataContext значение MyWidget1. (Если для DataContext установлено значение MyWidget1.Widget, он имеет только ссылку на виджет и не имеет возможности обновить ссылку в MyWidget1.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...