我正在尝试使用MVVM来显示数据网格,并在编辑完行时保存更改。这是datagrid的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的调用能够正常工作。有什么想法吗?
答案 0 :(得分:1)
这样对我有用,我正在使用SL4,mvvm工具包3和WCF RIA服务,ds =域名服务
private void guardarFila()
{
IsBusy = true;
ds.SubmitChanges(new Action<submitoperation>(SubmitChangesCompleted), null);
}
private void SubmitChangesCompleted(SubmitOperation args)
{
IsBusy = false;
}