Silverlight,MVVM和datagrid不保存更改

时间:2011-01-27 19:49:17

标签: silverlight data-binding mvvm wcf-ria-services

我正在尝试使用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的调用能够正常工作。有什么想法吗?

1 个答案:

答案 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;
}