2017-06-16 58 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; 
    } 
} 

当我创建新富,然后改变一些属性它就像我认为这将。但是当我试图从EF数据库中获取Foo时,PropertyChanged事件被触发。任何建议如何从数据库中获取Foo而不是触发PropertyChanged?

谢谢!

+1

当你从数据库中获得对象时,EF为你创建该对象,然后*设置*它的属性。这就是事件被解雇的原因。 – 3615

+0

是的,我想通了..但有一些解决方法? – Pavol

+0

没有人知道。 INPC通常用于ViewModels,但EF返回域实体。你应该改变方法。不应将INPC添加到实体,而应创建表示实体并在其中添加INPC的ViewModels。为了将实体转换为ViewModels,你可以使用像automapper这样的东西。 – 3615

回答

0

的建议,我做了这样的好感谢:

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; 
    } 
} 

所以我采取Foo从数据库中,与Automapper地图属性,然后我打电话NoticeChanges