私はWPF.NETFramework4.0で作業しています
ファシリティというオブジェクトがあります。このクラスには、他の多くのオブジェクトとオブジェクトのコレクションが含まれています。他のオブジェクトのコレクションで次の問題は発生していません。
セットアップ:リストから施設を選択します。ViewModelを次のように初期化します。
var facilityResults = _app.FacilityManager.Get(facility.Id);
if (facilityResults.Success)
{
ViewModel.Facility = facilityResults.Data;
ViewModel.Facility.PropertyChanged += DataChanged;
}
else
{
ViewModel.ValidationResults = facilityResults.ManagerActionResultCollection;
return;
}
私のコレクションは次のように定義されています。
public virtual ObservableCollection<FacilityNoticeDetail> FacilityNoticeDetails
{
get { return _facilityNoticeDetails; }
set
{
_facilityNoticeDetails = value;
OnPropertyChanged("FacilityNoticeDetails");
}
}
前に言ったように、これは他のオブジェクトのコレクションと同じように定義されます。仮想化されているため、FacilityNoticeDetailへの参照がわかります。
問題:
このソリューションを実行すると、データベースにデータがありますが、そのコレクションは空です。他のすべてのオブジェクトは正常にロードされます。ここにキッカーがあります...デバッガーをステップスルーしてfacilityResults.Dataオブジェクトを見ると、コレクションがそこにあり、設定されますが、コードをステップスルーした場合のみです。
添加
FacilityResultsは、カスタムクラスであるタイプManagerActionResultです。
public class ManagerActionResult<T>
{
public ActionResultCollection ManagerActionResultCollection { get; set; }
public bool Success { get; set; }
public T Data { get; set; }
public ManagerActionResult()
{
Success = true;
ManagerActionResultCollection = new ActionResultCollection();
}
public ManagerActionResult(bool valid, string message)
{
Success = valid;
ManagerActionResultCollection = new ActionResultCollection();
}
}
public new ManagerActionResult<Facility> Get(int id)
{
var result = base.Get(id);
if (result.Success)
{
var facility = result.Data;
CalculateFeePayments(facility.Fees);
CalculateContractPayments(facility.Contracts);
}
return result;
}
public ManagerActionResult<T> Get(int id)
{
var result = new ManagerActionResult<T>() { Success = true };
try
{
var set = _context.Set<T>();
var entity = set.Find(id);
result.Data = entity;
}
catch (Exception ex)
{
result.Success = false;
result.ManagerActionResultCollection.Add(new ErrorActionResult(false, ex.GetBaseException().Message, NotificationSeverityEnum.ERROR, ex.GetBaseException().StackTrace));
Log.Error(ex.Message);
}
return result;
}
実行しているのは、コンテキストを使用して、Facilityオブジェクトとそれに関連するデータを戻すことだけです。それでも不明な点がある場合はお知らせください。