Bạn đang sử dụng;
SelectionChanged="{Binding Path=DataContext.cbConnection_SelectionChanged}"
Sự kiện thực sự là sự kiện.
Bạn nên ràng buộc Thuộc tính công khai (có thể triển khai INotifyPropertyChanged) trong ViewModel của mình thành SelectedItem Thuộc tính để quản lý các thay đổi đối với Lựa chọn.
Giả sử rằng cửa sổ của bạn có DataContext, chứ không phải là combobox chính nó ...
SelectedItem Binding Version:
Vì vậy, XAML của bạn sẽ là một cái gì đó tương tự;
<ComboBox x:Name="cbConnection"
ItemsSource="{Binding Source={StaticResource XmlConnectionList}, XPath=//ComboItem}"
DisplayMemberPath="Key"
SelectedValuePath="Value"
SelectedItem="{Binding Path=DataContext.cbConnectionSelectedItem}"
/>
Và trong ViewModel của bạn;
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
chữ Version Binding:
Tất nhiên, nếu tất cả các bạn quan tâm đến là các văn bản giá trị của những gì họ đã chọn, bạn có thể về mặt lý thuyết chỉ ràng buộc các ComboBox chữ tài sản vào một String Công Thuộc tính trong ViewModel của bạn;
XAML của bạn sẽ là;
<ComboBox x:Name="cbConnection"
ItemsSource="{Binding Source={StaticResource XmlConnectionList}, XPath=//ComboItem}"
DisplayMemberPath="Key"
SelectedValuePath="Value"
Text="{Binding Path=DataContext.cbConnectionText}"
/>
Và ViewModel của bạn;
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 Binding Version:
Nếu bạn đang hiển thị các Key, nhưng muốn giá trị từ Key/Value Pair, thì bạn nên liên kết với 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
Lưu ý thêm các biểu tượng @.
Như tôi đã đề cập ở trên, điều này giả định rằng Cửa sổ của bạn có tập dữ liệu DataContext tại đây. Nếu không, sau đó loại bỏ các "DataContext." Của từ Bindings ở trên!
Tôi cho rằng bạn hiện đang thấy các mục được liệt kê trong ComboBox của mình?
Hy vọng điều này sẽ hữu ích!
Hey Sammarcow ... Làm thế nào đã làm bạn nhận được trên? Nó có hoạt động không? – PGallagher