WPF ViewModel不设置值,除非在代码中执行步骤
本文关键字:代码 执行 ViewModel 设置 WPF | 更新日期: 2023-09-27 18:00:27
我在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的引用。
问题:
当我运行这个解决方案时,即使数据库中有数据,那个集合也是空的。所有其他对象加载良好。踢球者来了。。。如果我遍历调试器并查看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对象及其关联数据带回。如果还不清楚,请告诉我。
我不确定你是否理解Justin试图表达的观点。
如果您的集合名为FacilityNoticeDetails,则需要更改语句
ViewModel.Facility = facilityResults.Data;
至
ViewModel.FacilityNoticeDetails = facilityResults.Data;
正如BaconSah所提到的,你实际上并没有向我们展示你是如何从你的角度绑定到这个集合的。您将需要某种集合容器,如列表框,其中itemsource绑定到视图模型上的FacilityNoticeDetails属性。
我想我还假设您已经正确地连接了OnPropertyChanged代码。
这里有一个不错的示例项目,您可以下载作为参考资料。http://archive.msdn.microsoft.com/mag200902MVVM/Release/ProjectReleases.aspx?ReleaseId=2026