2015-05-09 60 views
1

我有一些具有導航屬性的實體 其中一些實體用於綁定到某些DataGrid。實現PropertyChanged對於導航屬性

我的問題是,如果我爲導航屬性分配一個新值,它並不反映他在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(); 
    } 
} 

這樣,它不會對UI的變化在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

這不是一個真正的表現問題。您需要INPC才能使您的應用程序正常工作,因此性能成本無關緊要。你可以放棄它,並依賴於清理和重新使用集合(假設它們是可觀察的),但只要有合理的選擇,這會使我感到糟糕和不必要的耦合解決方案。

T4是生成屬性的合理方法。你也許可以按照YAGNI節省麻煩,並且爲VS插件提供某種模板功能來增強編輯器,特別是如果你的模式很小並且將來不太可能改變。

+0

首先爲您所有的時間。正如你所說這是一個**不必要的耦合**解決方案。您是否知道另一種強制UI在屬性爲Navigation屬性時反映視圖模型更改的方法? –

+0

@JuanPabloGomez:不是,自從我上次做WPF以來,這已經有一段時間了。代碼生成是足夠好IMO。 – Jon