我有一些带有导航属性的实体 其中一些实体用于绑定到某些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模板实现这一点是否正确,以避免手写实现?
这项任务有另一种方法吗?
答案 0 :(得分:1)
这不是性能问题。您的应用需要INPC才能工作,因此性能成本无关紧要。您可以放弃它并依赖清除和重新填充集合(假设它们是可观察的),但只要有合理的替代方案,这就会成为一种糟糕且不必要的耦合解决方案。
T4是生成属性的合理方法。您也许可以根据YAGNI省去麻烦,并为VS插件使用某种模板功能来增强编辑器,特别是如果您的架构很小并且将来不太可能改变。