2011-01-27 8 views
0

を保存しません。ここでXAMLは、DataGridのです:シルバー、MVVM、およびデータグリッドは、私はデータグリッドを表示し、行が編集されて実行されたときに、変更を保存するためにMVVMを使用しようとしている変更

<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

ない100%一定これは私がこれを投稿しておりませんので、SLがあるため、答えは、しかし、WPFであなたは、トリガーで何をするか、あなたのモデルがINotifyPropertyChangedのを実装することになるので、DataGridTextColumnに変化する値を経由して、新しい値がモデルにプッシュされますので、「保存」する明示的な方法を持っている必要はありません。トリガーの動作を削除し、期待通りに動作しないかどうかを確認してください。 –

+0

トリガーを削除すると何も起こりません。 :( – Josh

+0

ちょうどバックエンドにデータをプッシュするためのモデルまたはモデルに埋め込ま間のサービスがあるはず... RIAの参照を指摘した。 –

答えて

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; 
} 
関連する問題