Я пытаюсь использовать MVVM для отображения сетки данных и сохранения изменений после завершения редактирования строки. Вот XAML для таблицы данных:
<data:DataGrid x:Name="discountsDataGrid" ItemsSource="{Binding Discounts, Mode=TwoWay}" MinHeight="200" AutoGenerateColumns="False" SelectedItem="{Binding SelectedDiscount, Mode=TwoWay}">
<i:Interaction.Triggers>
<i:EventTrigger EventName="RowEditEnded">
<i:InvokeCommandAction Command="{Binding SaveChangesCommand}" CommandParameter="{Binding SelectedDiscount}" />
</i:EventTrigger>
</i:Interaction.Triggers>
<data:DataGrid.Columns>
<data:DataGridTextColumn Header="Name" Binding="{Binding Name}" />
<data:DataGridTextColumn Header="Discount Amount" Binding="{Binding Amount}" />
</data:DataGrid.Columns>
</data:DataGrid>
А вот код, который сохраняется на ViewModel:
public void Save(object parameter){
if (ctx.HasChanges){
((IEditableObject)SelectedDiscount).EndEdit();
ctx.SubmitChanges(SubmitOperation, null);
RaisePropertyChange("Discounts");
}
}
До того, как появилась строка '((IEditableObject) SelectedDiscount) .EndEdit ();' Я был бы исключением, потому что из сетки данных не вызывалось конечное редактирование. Поскольку я пытаюсь придерживаться MVVM, модель представления не должна знать о сетке данных, отображающей данные. Итак, я добавил эту строку, код выполняется, и возвращаемый результат показывает, что была измененная запись и ошибок валидации не произошло. Но это никогда не прилипает к базе данных. Есть ли причина, по которой этот код не полностью записывает значения обратно в базу данных? Переменная ctx - это просто служба домена RIA Services. Прежде чем идти по маршруту MVVM, я обычно просто вызывал datagrid.CommitEdit (), но у меня не было доступа к нему сейчас, и я надеялся, что вызов IEditableObject будет работать. Есть идеи?