您正在使用;
SelectionChanged="{Binding Path=DataContext.cbConnection_SelectionChanged}"
这实际上是一个事件。
您应该将您的ViewModel中的公共属性(可能实现INotifyPropertyChanged)绑定到SelectedItem属性以管理Selection中的更改。
假设你的窗口有DataContext的,而不是组合框本身...
的SelectedItem绑定版本:
所以,你的XAML会是这样;
<ComboBox x:Name="cbConnection"
ItemsSource="{Binding Source={StaticResource XmlConnectionList}, XPath=//ComboItem}"
DisplayMemberPath="Key"
SelectedValuePath="Value"
SelectedItem="{Binding Path=DataContext.cbConnectionSelectedItem}"
/>
而在你的ViewModel;
Private _cbConnectionSelectedItem As XmlElement
Public Property cbConnectionSelectedItem As XmlElement
Get
Return _cbConnectionSelectedItem
End Get
Set(value As XmlElement)
If value.Equals(_cbConnectionSelectedItem) = False Then
_cbConnectionSelectedItem = value
OnPropertyChanged("cbConnectionSelectedItem")
End If
End Set
End Property
文字效力之版本:
当然,如果您的所有感兴趣的是他们选择了什么样的文本值,理论上你可以只绑定组合框文本属性的公共字符串ViewModel中的属性;
然后,您的XAML将会;
<ComboBox x:Name="cbConnection"
ItemsSource="{Binding Source={StaticResource XmlConnectionList}, XPath=//ComboItem}"
DisplayMemberPath="Key"
SelectedValuePath="Value"
Text="{Binding Path=DataContext.cbConnectionText}"
/>
而你的ViewModel;
Private _cbConnectionText As String
Public Property cbConnectionText As String
Get
Return _cbConnectionText
End Get
Set(value As String)
If value.Equals(_cbConnectionText) = False Then
_cbConnectionText = value
OnPropertyChanged("cbConnectionText")
End If
End Set
End Property
的SelectedValue绑定版本:
如果要显示的重点,但想从键/值对的值,那么你应该绑定到的SelectedValue;
XAML;
<ComboBox x:Name="cbConnection"
ItemsSource="{Binding Source={StaticResource XmlConnectionList}, XPath=//ComboItem}"
DisplayMemberPath="@Key"
SelectedValuePath="@Value"
SelectedValue="{Binding Path=DataContext.cbConnectionValue}" />
ViewModel;
Private _cbConnectionValue As String
Public Property cbConnectionValue As String
Get
Return _cbConnectionValue
End Get
Set(value As String)
If value.Equals(_cbConnectionText) = False Then
_cbConnectionValue = value
OnPropertyChanged("cbConnectionValue")
End If
End Set
End Property
请注意额外的@符号。
正如我上面提到的,这假定你的窗口在这里设置了DataContext。如果没有,那么从上面的Bindings中删除“DataContext。”的!
我假设您目前在您的ComboBox中看到列出的项目?
希望这会有所帮助!
添加引用嘿Sammarcow ...如何做你继续?它到底有效吗? – PGallagher