0

我正在使用 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 对象及其关联数据。如果这仍然不清楚,请告诉我。

4

1 回答 1

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

于 2013-02-20T23:15:39.343 回答