Używasz;
SelectionChanged="{Binding Path=DataContext.cbConnection_SelectionChanged}"
Co w rzeczywistości jest wydarzeniem.
Należy powiązać własności publicznej (ewentualnie wykonawczych INotifyPropertyChanged) w ViewModel do selectedItem Własności zarządzać zmian tn wybór.
Zakładając, że okno ma DataContext, zamiast samego combobox ...
SelectedItem Oprawa Wersja:
Więc XAML byłoby coś takiego;
<ComboBox x:Name="cbConnection"
ItemsSource="{Binding Source={StaticResource XmlConnectionList}, XPath=//ComboItem}"
DisplayMemberPath="Key"
SelectedValuePath="Value"
SelectedItem="{Binding Path=DataContext.cbConnectionSelectedItem}"
/>
W swoim ViewModelu;
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
Tekst Oprawa Wersja:
Oczywiście, jeśli wszystkie Twoje zainteresowanie jest wartość tekstu, co oni wybrali, można teoretycznie tylko powiązać obiekt ComboBox tekst do public string Właściwość w twoim ViewModel;
Twój XAML będzie wtedy;
<ComboBox x:Name="cbConnection"
ItemsSource="{Binding Source={StaticResource XmlConnectionList}, XPath=//ComboItem}"
DisplayMemberPath="Key"
SelectedValuePath="Value"
Text="{Binding Path=DataContext.cbConnectionText}"
/>
Twój model 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 Oprawa Wersja:
Jeśli wyświetlanie kluczem, ale chcą wartość z parę klucz/wartość, to należy wiązać z 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
Zwróć uwagę na dodatkowe symbole @.
Jak już wspomniałem powyżej, zakłada się, że w tym oknie znajduje się zestaw DataContext. Jeśli nie, usuń "DataContext" z powyższych powiązań!
Zakładam, że widzisz obecnie elementy wymienione na liście ComboBox?
Mam nadzieję, że to pomoże!
Hej Sammarcow ... W jaki sposób wsiadasz? Czy to działa na końcu? – PGallagher