我有以下情况:
1个名为'Widget'的类,其属性为:ID,Code,Description
1个名为'MyWidget'的类,带有属性:m_Widget As Widget
1 ComboBox
ComboBox将List(Of Widget)设置为ItemSource。
我创建一个名为MyWidget1的'MyWidget'实例,并设置m_Widget的属性值以匹配'ComboBox List(Of Widget)'中的一个项目。 然后我将ComboBox的DataContext设置为MyWidget1.Widget。
当我更改ComboBox所选项目时,只更新'MyWidget1.Widget'的ID属性...
如何更新'MyWidget1'上的对象'Widget'而不仅仅是'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选择时,只更新所选MyWidget.Widget的ID。
除了MyWidget.Widget的所有属性都得到更新外,我确实需要这种行为。
我怀疑我之前需要绑定Widget对象而不是Widget的属性,但我无法让它工作,所以我认为你的答案是正确的,但看起来我好像我仍然缺少一些东西。
另外,谢谢你的帮助,雷。 ;)
答案 0 :(得分:2)
这是你的问题:
SelectedValue="{Binding Path=ID}"
SelectedValuePath="ID"
这意味着ComboBox应该更新ID值,而不是Widget本身。
替换为:
SelectedValue="{Binding Widget}"
并将DataContext设置为MyWidget1。 (如果将DataContext设置为MyWidget1.Widget,它只有对Widget的引用,并且无法更新MyWidget1中的链接。)