2011-10-25 9 views
10

Ekrandan devralan Çocuk Görünüm Modellerinin Ana Ekranın yaşam döngüsüne katılması beklenir. Ancak, bu durum böyle değil. Örneğin:OnInitialize ve OnActivate alt öğelerde görüntülenmez Görünüm Modelleri

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

    public ParentViewModel(ChildViewModel childViewModel) 
    { 
     this.Child = childViewModel; 
    } 

    public override void OnInitialize() { // called - as expected } 

    public override void OnActivate() { // called - as expected } 

    public override void OnDeactivate() { // called - as expected } 
} 

public class ChildViewModel : Screen 
{ 
    public override void OnInitialize() { // not called - why? } 

    public override void OnActivate() { // not called - why? } 

    public override void OnDeactivate() { // not called - why? } 
} 

bir çocuğun Ekran ebeveyn Screen'in yaşam döngüsü katılmasını sağlamak mümkün mü?

Bu davranışı görünüyor

cevap

15

varsayılan olarak değil ve aşağıdaki gibi veli, ConductWith yöntemi kullanarak çocuk Görüntüle Modelleri 'yürütmek' söylenmesi gerekir:

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

    public ParentViewModel(ChildViewModel childViewModel) 
    { 
     this.Child = childViewModel; 

     Child.ConductWith(this); 
    } 
} 

Bu ChildViewModel başlatıldı, devreye girecektir garantiler ve ebeveyn ile aynı anda deaktive edilir. ActivateWith yöntemi, yalnızca çocuğu başlatmanız/etkinleştirmeniz gerekiyorsa kullanılabilir.

2

Diğer seçenek, üst öğeyi Conductor türünde yapmak ve çocuğa etkin öğeyi yapmaktır.

+0

Bu düşünce() OnActivated ait

protected override void OnViewAttached(object view, object context) 

kullanmaktır, ama biraz her ebeveyne VM bir iletken hale getirmek için ağır eli görünüyor. Yine de muhtemelen işe yarayacaktı. Çoklu çocuk görüş modellerini desteklemek için, 'İletken .Collection.AllActive' kullanılmalıdır. – JulianM

0

Diğer çözüm yerine

İlgili konular