0

私は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オブジェクトとそれに関連するデータを戻すことだけです。それでも不明な点がある場合はお知らせください。

4

1 に答える 1

1

ジャスティンが主張しようとしていたことをあなたが理解したかどうかはわかりません。

コレクションの名前がFacilityNoticeDetailsの場合は、ステートメントを変更する必要があります

ViewModel.Facility = facilityResults.Data;

ViewModel.FacilityNoticeDetails = facilityResults.Data;

BaconSahが述べたように、あなたは実際にあなたの視点からこのコレクションにどのようにバインドするかを私たちに示していません。ビューモデルのFacilityNoticeDetailsプロパティにitemssourceがバインドされたリストボックスのようなある種のコレクションコンテナが必要になります。

また、OnPropertyChangedコードを正しく接続したことも前提としています。

これは、参考資料としてダウンロードできる素晴らしいサンプルプロジェクトです。 http://archive.msdn.microsoft.com/mag200902MVVM/Release/ProjectReleases.aspx?ReleaseId=2026

于 2013-02-20T23:15:39.343 に答える