实现PropertyChanged用于导航属性

时间:2015-05-09 18:36:04

标签: c# wpf entity-framework

我有一些带有导航属性的实体 其中一些实体用于绑定到某些DataGrids。

我的问题是,如果我为导航属性分配一个新值,它不会在UI中反映他的新值。

这样的事情:

public partial class Movimientos : BaseModel
{
    public Movimientos()
    {
    }
    private Nullable<int> _intIdBodega;
    public Nullable<int> IntIdBodega 
    { 
        get { return _intIdBodega; } 
        set { SetProperty(ref _intIdBodega, value); } 
    } 

    public virtual INV_Bodegas INV_Bodegas { get; set; }
}

public class viewModel
{
    public viewmodel()
    {
        Movimientos mv = new Movimientos();
        mv.INV_Bodegas = db.INV_Bodegas.First();
    }   
} 

这样就不会在用户界面上反映mv.INV_Bodegas的变化。但是如果我重新实现导航属性:

public partial class Movimientos : BaseModel
{
    . . .

    private INV_Bodegas _INV_Bodegas;
    public virtual INV_Bodegas INV_Bodegas
    { 
        get { return _INV_Bodegas; } 
        set { SetProperty(ref _INV_Bodegas, value); } 
    }           
}

这些变化反映在UI上,正如我所期望的那样(当然这是INPC的工作方式)。

但我的问题是关于性能和样板代码:

这会对我的应用程序的性能产生不利影响吗?

通过T4模板实现这一点是否正确,以避免手写实现?

这项任务有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

这不是性能问题。您的应用需要INPC才能工作,因此性能成本无关紧要。您可以放弃它并依赖清除和重新填充集合(假设它们是可观察的),但只要有合理的替代方案,这就会成为一种糟糕且不必要的耦合解决方案。

T4是生成属性的合理方法。您也许可以根据YAGNI省去麻烦,并为VS插件使用某种模板功能来增强编辑器,特别是如果您的架构很小并且将来不太可能改变。