2017-06-16 4 views
0

私はいくつかの基本クラスを使用するWPFアプリケーションを持っています。私もFody PropertyChangedとEF 6.1.3を使います。プロパティのいずれかが変更されたときはいつでもプロパティSaveNeededを変更しようとしています。だから私はこのクラスを書く:データベースからエンティティを取得するときにPropertyChangedを起動させない方法は?

public class Foo : INotifyPropertyChanged 
{ 
    public Foo() 
    { 
     PropertyChanged += Foo_PropertyChanged; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public string GivenNames { get; set; } 

    public int Id { get; set; } 

    [NotMapped] 
    public bool SaveNeeded { get; set; } 

    private void Foo_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     SaveNeeded = true; 
    } 
} 

私は新しいFooを作成し、いくつかのプロパティを変更すると、それは私が思うように動作します。しかし、EFでデータベースからFooを取得しようとすると、PropertyChangedイベントが発生します。どのようにFooをデータベースから取得し、PropertyChangedを起動させないかの提案はありますか?

ありがとうございました!私はこのようにそれをやった提案のため

+1

データベースからオブジェクトを取得すると、EFによってそのオブジェクトが作成され、次に*プロパティが設定されます。だからこそ、イベントが解雇されるのです。 – 3615

+0

はい、私はそれを考え出しましたが、回避策がいくつかありますか? – Pavol

+0

私が知っている人はいません。 INPCはViewModelで通常使用されますが、EFはドメインエンティティを返します。あなたはアプローチを変更する必要があります。エンティティにINPCを追加する代わりに、エンティティを表すViewModelを作成し、そこにINPCを追加する必要があります。エンティティをViewModelsに変換するには、オートマッパのようなものを使用できます。 – 3615

答えて

0

[OK]を感謝:

public class Foo : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    public string GivenNames { get; set; } 

    public int Id { get; set; } 
} 

public class FooViewModel : Foo 
{ 

    public bool SaveNeeded { get; set; } 

    public void NoticeChanges() 
    { 
     PropertyChanged += FooViewModel_PropertyChanged; 
    } 

    private void FooViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     SaveNeeded = true; 
    } 
} 

は、だから私は、データベースからAutomapperでマップの特性をFooを取り、その後、私はNoticeChangesを呼びます。

関連する問題