私は現在、一連のデータアクセスサービスから戻ってきたドメインモデルからマッピングされた一連の複合ViewModelを備えたソリューションに取り組んでいます。
INotifyPropertyChanged
これまでのところ、ベースのViewModelオブジェクトに実装し、プロパティ変更イベントを介してプロパティオブジェクトへの変更をUIに通知することで、かなりの成功を収めてきました。
ビューモデルの例を次に示します。
public class DisplayDataModel : INotifyPropertyChanged{
private DateTime _lastRefreshTime;
public DateTime LastRefreshTime {
get { return _lastRefreshTime; }
set {
_lastRefreshTime = value;
this.NotifyPropertyChanged(lddm => lddm.LastRefreshTime, PropertyChanged);
}
}
private string _lineStatus;
public string LineStatus {
get { return _lineStatus; }
set {
if (_lineStatus != value) {
_lineStatus = value;
this.NotifyPropertyChanged(lddm => lddm.LineStatus, PropertyChanged);
}
}
}
private ProductionBrickModel _productionBrick;
public ProductionBrickModel ProductionBrick {
get { return _productionBrick;}
set {
if (_productionBrick != value) {
_productionBrick = value;
this.NotifyPropertyChanged(lddm => lddm.ProductionBrick, PropertyChanged);
}
}
}
}
public class ProductionBrickModel{
public int? Set { get; set; }
public int? Theoretical { get; set; }
public int? Actual { get; set; }
public string LineName { get; set; }
public TimeSpan? ShiftOverage { get; set; }
public SolidColorBrush ShiftOverageBrush {
get {
if (ShiftOverage.HasValue && ShiftOverage.Value.Milliseconds < 0) {
return Application.Current.FindResource("IndicatorRedBrush") as SolidColorBrush;
}
return Application.Current.FindResource("IndicatorWhiteBrush") as SolidColorBrush;
}
}
public string ShiftOverageString { get { return ShiftOverage.HasValue ? ShiftOverage.Value.ToShortTimeSpanString() : ""; } }
}
そのため、現在、本番ブリックプロパティではなく、ベースモデルで通知イベントを発生させています。これは主に、本番ブリックプロパティがほぼすべての更新で変更されるためです。
最近、リフレッシュ時間を約350msまで下げ始めましたShiftOverageBrush
が、値がまだ負であるにもかかわらず、が一瞬白に変わる状況が見られます。
私の質問はINotifyPropertyChanged
、ベースビューモデルを構成するオブジェクトタイプを調べて実装することで、パフォーマンスが向上するか、あるいはこの問題を解決できるかどうかです。それとも、これは私が理解していない何か他のものから来ているのでしょうか?