2010-09-07 56 views
1

我想了解更多關於winforms的生命週期。我知道BindingContextChanged事件將該窗體的Visible屬性設置爲true。但我想知道,哪種語境與表單綁定?什麼觸發BindingContextChanged,以便將窗體屬性Visible設置爲true?C#上下文綁定到窗體時加載窗體?

回答

2

我不知道BindingContextVisible,但一般每個窗體不僅僅是獲得了一個新的BindingContext之間的緊密相關性。如果你需要在不同的控件之間做一些獨立的綁定上下文,那麼你可以通過將你自己的 BindingContext分配給一些控件來做到這一點。

展望反射器,它看起來像BindingContext設置首次diring的getContainerControl - 事實上,這是只有發生在BCL它似乎是new編輯:

public override BindingContext get_BindingContext() 
{ 
    BindingContext bindingContext = base.BindingContext; 
    if (bindingContext == null) 
    { 
     bindingContext = new BindingContext(); 
     this.BindingContext = bindingContext; 
    } 
    return bindingContext; 
} 

即當第一次需要BindingContext並且分配給this.BindingContext導致事件(etc)被調用時,它被懶惰地實例化。

不知道爲什麼你認爲這與Visible有關係 - 謹慎解釋?

+0

我收集了有關winform生命週期的信息。雖然我正在研究,我發現這個網站:http://www.csharp411.com/c-winforms-form-event-order/在這裏,他們說,'BindingContextChanged'事件使窗體(控制)可見。所以我很好奇是什麼觸發了這個事件? – Martijn 2010-09-07 09:37:32

+0

@Martijn - 我懷疑這是一個誤解;我在猜測,但它可能*正在變得可見*(即財產已被改變,齒輪正在呼呼,但尚未完成);呈現控件內容可能需要一個綁定上下文,這會導致綁定上下文更改事件觸發。即使事件還沒有開始(可見性變化尚未完成),此時檢查「可見」將返回true。 – 2010-09-07 10:01:09

+0

@Martijn - 當然,你可以在綁定上下文更改的事件處理程序中插入一個斷點,然後查看調用堆棧以確保。 – 2010-09-07 10:01:45