を保存しません。ここで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への呼び出しがうまくいくことを期待していました。何か案は?このように
ない100%一定これは私がこれを投稿しておりませんので、SLがあるため、答えは、しかし、WPFであなたは、トリガーで何をするか、あなたのモデルがINotifyPropertyChangedのを実装することになるので、DataGridTextColumnに変化する値を経由して、新しい値がモデルにプッシュされますので、「保存」する明示的な方法を持っている必要はありません。トリガーの動作を削除し、期待通りに動作しないかどうかを確認してください。 –
トリガーを削除すると何も起こりません。 :( – Josh
ちょうどバックエンドにデータをプッシュするためのモデルまたはモデルに埋め込ま間のサービスがあるはず... RIAの参照を指摘した。 –