0

sales.xaml、buy.xamlなど、いくつかの異なるwpfウィンドウがあります。

どちらのウィンドウも同じ EF コードの最初のモデルである sales.cs を使用しています。

sales.xaml の販売モデルに価値を追加しました。

モデル属性を静的にしないと、データが失われます。

ありがとうございました。

4

2 に答える 2

0

1 つのオプションは、モデルのインスタンスを StaticResource として宣言し、各ページでそれにアクセスして、必要に応じてインスタンスを DataContext に設定することです。

<Application.Resources>
 <Example:ViewModel x:Key="VM"/>
</Application.Resources>

...

 <UserControl.DataContext>
  <Binding Source="{StaticResource VM}"/>
 </UserControl.DataContext>

各ページでこれを行う場合、すべての変更は、アプリケーションの ResourceDictionary にグローバルに格納されているインスタンスに保持されます。

于 2012-10-02T03:16:01.547 に答える
0

どのような状況でも、データ コンテキストを静的にしないでください。シングルトンを使用しないでください。グローバルにしないでください。

データ操作を行う必要がある場合は、常に新しいデータ コンテキストをインスタンス化してください。操作が完了したら、SaveChanges を呼び出して、次に必要になったときにデータが返されるようにします。

その理由は、データ コンテキストが短命になるように設計されているためです。コンテキストを静的にすると、アプリの存続期間中に破棄されることはありません。最終的にメモリ不足になるまで、オブジェクト キャッシュを拡張し続けます。

データ コンテキストには、アボートまたはロールバック機能はありません。これらは、論理演算の最後に破棄されるように設計されています。データ コンテキストにエンティティを追加してから、SaveChanges.. エラーが発生した場合、追加したばかりのデータを削除する方法はありません。サポートされている唯一の方法は、コンテキストを破棄することです。

于 2012-10-02T06:20:51.793 に答える