[英]EF Fluent API: Set property for each entity derived from a base abstract class
[英]Observable / notifying derived / computed property of EF entity class
我正在嘗試在WPF應用程序中使用.NET實體框架。 我有一些模型類,這些模型類根據各種屬性在某些列表中應該是可見的還是不可見的。 對於單個屬性(例如bool
屬性),到目前為止,我可以使用Converter將bool
值轉換為Visibility
。
下一個挑戰是,我需要執行更復雜的操作以確定模型元素是否應可見。 一個典型的示例可能如下所示:
public bool IsVisibleInProjectView
{
get { return (!IsDeleted && IsSelectedForDisplay && Milestones.Any(ms => ms.IsVisibleInProjectView)); }
}
我能夠將此方法添加到生成的部分類中,並使用Binding來影響可見性。 但是,這樣做有一個缺點:只要更改了基礎屬性之一,就不會通知正在監聽“派生屬性”的任何人。 我發現了一些建議手動觸發OnPropertyChanged
事件的答案,但是生成的EF類非常輕巧,似乎沒有實現接口INotifyPropertyChanged
(不再嗎?)似乎我在這里缺少了一些東西-如果EF實體不是發出通知的人是誰?
我也曾嘗試向模型中添加計算屬性(我使用的是模型優先方法),但基本上陷入了困境,並遇到了同樣的問題:只要基本屬性之一發生變化,我將如何更新計算屬性?
當我發布一個演示非常簡單的MVVM的答案時,請參考此處 。 如果您查看我的視圖模型如何包裝HomePage和SettingsPage模型,則您的視圖模型可以類似的方式工作並包裝EF模型。 這樣,您的EF模型可以非常輕巧,並且不需要實現INPC。
如果您在模型上確實具有計算屬性,則視圖模型將“包裝”該屬性以將其公開給您的xaml視圖-類似於其包裝常規屬性的方式。
具體來說,您可以將這些方法放在viewmodel類中
public EfModelClass Model { get; private set; }
private bool _isVisibleInProjectView;
public bool IsVisibleInProjectView
{
get { return _isVisibleInProjectView; }
set { _isVisibleInProjectView; OnPropertyChanged("IsVisibleInProjectView");}
}
private void UpdateVisibility()
{
IsVisibleInProjectView =
(!IsDeleted && IsSelectedForDisplay
&& Milestones.Any(ms => ms.IsVisibleInProjectView));
}
public bool IsDeleted
{
get { return Model.IsDeleted; }
set
{
Model.IsDeleted = value;
OnPropertyChanged("IsDeleted");
UpdateVisibility(); // This will change your IsVisibleInProjectView and notify the UI
}
}
...
當我學習MVVM時,Rachel的本教程也對我有很大幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.