Итак, у меня возникла проблема, с которой, надеюсь, вы сможете помочь.
Я пишу приложение WPF, используя MVVM Light в качестве фреймворка.В этой ситуации у меня есть список элементов, и SelectedItem привязан к подробному представлению, где пользователь может редактировать элемент.В этом случае есть кнопка Сохранить для явного сохранения данных.
Моя проблема в том, что когда пользователь редактирует данные, изменения немедленно отображаются в списке.Если пользователь отменяет, он сбрасывает выбранный элемент, но он все еще изменен.Как предотвратить распространение изменений?
Я пытался реализовать реализацию клонирования, но как только я это сделал, система обмена сообщениями MVVM Light заканчивается циклом, в результате чего возникает исключение StackOverflowException из-за того, чтоЯ продолжаю клонировать объект.Кроме того, реализация клона уродлива.
Есть идеи о том, как я могу сделать это правильно?
РЕДАКТИРОВАТЬ:
Базовый XAML для представления списка:
<DataGrid DataContext="{Binding SubJobTypes}"
ItemsSource="{Binding}"
SelectedItem="{Binding ElementName=Root, Path=DataContext.SelectedSubJobType, Mode=TwoWay}">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding Name}"/>
</DataGrid.Columns>
</DataGrid>
Базовый XAML для вида редактирования:
<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 являются стандартными, публиковать не будут