我在WPF .NET Framework 4.0中工作
我有一个名为Facility的对象。该类包含许多其他对象和对象集合。对于任何其他对象集合,我没有以下问题。
设置:我从列表中选择我的设施。我按如下方式初始化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的引用。
问题:
当我运行此解决方案时,即使我在数据库中有数据,该集合也是空的。所有其他对象加载正常。这里是KICKER ...如果我单步执行调试器并查看facilityResults.Data对象,那么集合就在那里并且将被设置,但是只有我单步执行代码。
ADDITION
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对象及其关联数据带回来。如果仍然不清楚,请告诉我。
答案 0 :(得分:1)
我不确定你是否理解贾斯汀试图制造这一点。
如果您的集合名为FacilityNoticeDetails,则需要更改语句
ViewModel.Facility = facilityResults.Data;
到
ViewModel.FacilityNoticeDetails = facilityResults.Data;
正如BaconSah所说,你实际上没有向我们展示你如何从你的视图中绑定到这个集合。您将需要某种类似于列表框的集合容器,其中itemssource绑定到viewmodel上的FacilityNoticeDetails属性。
我想我也假设您正确连接了OnPropertyChanged代码。
这是一个很好的示例项目,您可以下载作为参考资料。 http://archive.msdn.microsoft.com/mag200902MVVM/Release/ProjectReleases.aspx?ReleaseId=2026