Ich habe also ein Problem, bei dem Sie mir hoffentlich helfen können.
Ich schreibe eine WPF-Anwendung mit MVVM Light als Framework. In dieser Situation habe ich eine Liste von Elementen, und das SelectedItem ist an eine Detailansicht gebunden, wo der Benutzer das Element bearbeiten kann. In diesem Fall gibt es eine Schaltfläche "Speichern" zum expliziten Speichern von Daten.
Mein Problem ist, dass, wenn der Benutzer die Daten bearbeitet, die Änderungen sofort in der Liste angezeigt werden. Wenn der Benutzer den Vorgang abbricht, wird das ausgewählte Element zurückgesetzt, aber es ist immer noch geändert. Wie verhindere ich, dass sich die Änderungen ausbreiten?
Ich habe versucht, eine Klon-Implementierung zu implementieren, aber sobald ich das getan habe, endet MVVM Light's Messaging-System in eine Schleife zu erhalten, was zu einer StackOverflowException aufgrund der Tatsache, dass ich halten das Objekt klonen. Außerdem ist die Klon-Implementierung hässlich.
Haben Sie eine Idee, wie ich das richtig machen kann?
EDIT:
Basis-XAML für die Listenansicht:
<DataGrid DataContext="{Binding SubJobTypes}"
ItemsSource="{Binding}"
SelectedItem="{Binding ElementName=Root, Path=DataContext.SelectedSubJobType, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>
Basis-XAML für die Bearbeitungsansicht:
<StackPanel>
<StackPanel>
<StackPanel Orientation="Horizontal" DataContext="{Binding Path=CurrentSubJobType}">
<TextBlock Text="Name"/>
<TextBox Text="{Binding Path=Name, Mode=TwoWay}" Width="150"/>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Button Content="{Binding Path=SubmitCommandText, FallbackValue=Submit}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Path=SaveSubJobTypeCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="Cancel" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Path=CancelCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
<Button Content="Delete">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding Path=DeleteCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</StackPanel>
</StackPanel>
</StackPanel>
ViewModels sind Standard, werden nicht gepostet