この質問を読んだばかりです: MVVMを使用してオブジェクトの編集をキャンセルするにはどうすればよいですか?
まったく同じ質問があり、簡単な解決策が必要です。最初のものは非常に有望に見えましたが、私はエンティティフレームワークを使用しており、クラスは自動的に生成されるため、それはオプションではありません。
EFでこれを簡単に行うにはどうすればよいですか?
編集:私のViewModel:
public List<Player> Players
{
get { return repository.Players.OrderBy(x => x.Firstname).ToList(); }
}
public Player CurrentPlayer
{
get { return currentPlayer; }
set
{
if (currentPlayer != value)
{
currentPlayer = value;
RaisePropertyChanged("CurrentPlayer");
}
}
}
プレーヤーはデータグリッドにバインドされ、CurrentPlayerはその選択されたアイテムにバインドされます。データグリッドの下に、ユーザーがプレーヤー情報を編集できるテキストボックスがあります。
ユーザーが保存ボタンを押すと、次のコードが実行されます。
private void SaveExecute(object parameter)
{
repository.SavePlayer(currentPlayer);
Editing = false;
}
非常に簡単。ユーザーがキャンセルボタンを押すと、これが実行されます。
private void CancelExecute(object parameter)
{
if (currentPlayer.Id == 0) // id = 0 when a new player is being added
{
CurrentPlayer = null;
}
else
{
// here, the CurrentPlayer should be set back to it's previous state.
}
Editing = false;
}
CurrentPlayerは、EFによって生成されたエンティティクラスであるPlayerのオブジェクトです。