0

親と子のビューモデルがあります:

public class ParentViewModel : Screen 
{
    public ChildViewModel Child { get; set; }
}

public class ChildViewModel  : PropertyChangedBase, IChild { }

を使用して親 VM が表示されるConductor.ActivateItem()と、Caliburn.Micro は、ビュー モデル オブジェクト グラフを検索し、表示するビューを探すなどの通常の作業を行います。

ParentViewModel.Parentこれがすべて完了した後、whileが Conductor への参照であるChildViewModel.Parentことがわかりましたnull

これは設計によるものですか?

よろしくお願いします。

4

2 に答える 2

0

これに対する 1 つの回避策は、親 VM が自身を子 VM に何らかの方法で渡すことです。

Parentプロパティを明示的に設定することによって:

var child = new ChildViewModel
{
    Parent = this
};

または、ビュー モデル オブジェクトを初期化するためのある種の IoC ベースの抽象化があると仮定すると、以下Configure()を返すメソッドを実装する規則を持つことができthisます。

public class ChildViewModel : PropertyChangedBase, IChild
{
    // IChild members...

    public ChildViewModel Configure(IScreen parent)
    {
        Parent = parent;
        return this;
    }
}

public class ParentViewModel : Screen
{
    public ChildViewModel Child { get; set; }

    protected override void OnInitialize()
    {
        Child = _viewModelFactory.Create<ChildViewModel>()
                                 .Configure(this);
    }
}

Caliburm.Micro のビュー モデル処理コードをカスタマイズして親を自動的に設定することは可能ですが、その方法を知るにはまだ十分に賢くありません。:)

于 2013-05-30T10:03:08.177 に答える