2011-10-25 8 views
10

Tôi dự kiến ​​rằng Mô hình Xem con kế thừa từ Màn hình sẽ tham gia vào vòng đời của Màn hình chính. Tuy nhiên, nó xuất hiện đây không phải là trường hợp. Ví dụ:OnInitialize và OnActivate không được gọi trên Mô hình Xem trẻ em

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? } 
} 

Có thể có màn hình con tham gia vòng đời của màn hình mẹ không?

Trả lời

15

Có vẻ như hành vi này không phải là theo mặc định và phụ huynh đã được thông báo để 'thực hiện' con Xem Models sử dụng phương pháp ConductWith, như sau:

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

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

     Child.ConductWith(this); 
    } 
} 

Điều này đảm bảo ChildViewModel sẽ được khởi tạo, kích hoạt và ngừng hoạt động cùng lúc với cha mẹ. Phương pháp ActivateWith có thể được sử dụng nếu bạn chỉ cần khởi tạo/kích hoạt con.

2

Tùy chọn khác là đặt cha mẹ thành loại Conductor và đặt con làm mục đang hoạt động.

+0

Tôi nghĩ về điều này, nhưng nó có vẻ hơi nặng tay để làm cho mọi cha mẹ VM một dây dẫn. Tuy nhiên, nó có thể sẽ hoạt động. Để hỗ trợ nhiều mô hình xem con, 'Đường dẫn .Collection.AllActive' sẽ phải được sử dụng. – JulianM

0

giải pháp khác là sử dụng

protected override void OnViewAttached(object view, object context) 

thay vì OnActivated()