WPF ComboBox对象绑定 - 不更新DataContext对象

时间:2010-06-15 21:16:31

标签: wpf binding

我有以下情况:

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的属性,但我无法让它工作,所以我认为你的答案是正确的,但看起来我好像我仍然缺少一些东西。

另外,谢谢你的帮助,雷。 ;)

1 个答案:

答案 0 :(得分:2)

这是你的问题:

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

这意味着ComboBox应该更新ID值,而不是Widget本身。

替换为:

SelectedValue="{Binding Widget}"

并将DataContext设置为MyWidget1。 (如果将DataContext设置为MyWidget1.Widget,它只有对Widget的引用,并且无法更新MyWidget1中的链接。)