Im folgenden Code, , wenn der Benutzer den Kunden in der Combobox auswählt, wird der Name des Kunden in einem Textfeld angezeigt. Ich fülle das Combox-Feld mit einer ObservableCollection-Eigenschaft in meinem ViewModel, aber wie handhabe ich das SelectedItem-Ereignis in meinem ViewModel?Was ist der einfachste Weg, SelectedItem-Ereignis mit MVVM zu behandeln?
Es ist einfach, dies mit Code-Behind zu implementieren, wie unten gezeigt, aber Wie mache ich das mit dem MVVM-Muster?
Ich habe derzeit DelegateCommand und AttachedBehaviors in meinem Grunde MVVM Vorlage, die ich verwenden kann, aber ich kann nicht herausfinden, wie sie zu feuern zu erhalten, wenn „Combobox ein neues Element auswählt“.
Ausblick:
<Window.Resources>
<DataTemplate x:Key="CustomerTemplate">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<DockPanel LastChildFill="False" Margin="10">
<ComboBox
x:Name="CustomerList"
ItemTemplate="{StaticResource CustomerTemplate}"
HorizontalAlignment="Left"
DockPanel.Dock="Top"
Width="200"
SelectionChanged="CustomerSelected"
ItemsSource="{Binding Customers}"/>
<TextBlock x:Name="CurrentlySelectedCustomer"/>
</DockPanel>
-Code Behind:
private void CustomerSelected(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
{
Customer customer = (Customer)CustomerList.SelectedItem;
CurrentlySelectedCustomer.Text = String.Format("{0} {1}", customer.FirstName, customer.LastName);
}
genau was ich suchte, wusste nicht, dass es so einfach war, danke –
Erinnern Sie sich einfach, dass dies eine Abhängigkeit zwischen Ihrer V/VM ... Wenn Sie diesen Code ohne testen die Ansicht wird der CurrentSelectedCustomer nie aktualisieren! Wenn Sie die CollectionView verwenden ... Es funktioniert, auch wenn Ihre Ansicht nicht an die VM binden! – rudigrobler
Im Allgemeinen stimme ich zu, dass ein CollectionView Vorteile bietet (obwohl es einige Vorbehalte gibt, wenn Sie die gleiche Liste an mehrere Selektoren binden wollen), aber ich denke nicht, dass Ihr Kommentar korrekt ist. In meiner Version gibt es keine Abhängigkeit mehr als deins. Wenn ich beispielsweise einen Test schreiben möchte, um zu überprüfen, ob die LastName-Eigenschaft korrekt aktualisiert wird, brauche ich keine Ansicht. Ich kann die SelectedCustomer-Eigenschaft nur über den Testcode festlegen. –