我只有在完成其所有初始數據綁定時,才需要更改某個DataGridView的屬性(用於其某個綁定的DataSourceUpdateMode)。我嘗試訂閱「DataBindingComplete」事件,但它被觸發了太多次(每個綁定關聯到控件一次或多次)。我需要的是一個更全局的「AllDataBindingsComplete」事件,當控件準備好顯示給用戶時觸發。Windows窗體綁定:是否有類似於DataBindingComplete的事件,但在所有綁定完成後觸發?
作爲臨時解決方法,我使用MouseDown事件(我假定當用戶能夠單擊控件時,這意味着控件顯示... :)以及事件我是的SelectionChanged - - 擺弄的鼠標按下解僱後):
protected override void OnMouseDown(MouseEventArgs e)
{
Binding selectedItemsBinding = this.DataBindings["SelectedItems"];
if (selectedItemsBinding != null)
{
selectedItemsBinding.DataSourceUpdateMode = DataSourceUpdateMode.OnPropertyChanged;
}
base.OnMouseDown(e);
}
它的工作原理,但它聞起來像一個醜陋的劈了很多(這就是所謂的次數太多,只是一個時間足夠滿足我的需求)。
有沒有更好的方法?
(是的,我想採用MVVM在Windows窗體項目,我添加了一個可綁定「SelectedItems」屬性到DataGridView ...)
我想保持我的控制儘可能多的「容器不可知」,在內部處理所有這些東西。無論如何,我試圖從控件構造函數中獲取對父窗體的引用,但是this.FindForm()並不總是返回一個非空窗體(即使是在ParentChanged處理程序中調用它)。現在,我使用第一個「Enter」事件,它比「MouseDown」事件更好,因爲它甚至可以通過鍵盤導航來調用) – Notoriousxl 2011-06-03 18:22:21
...最後,我遵循了您的建議(Load事件),將DataGridView封裝在用戶控件(具有Load事件)中,並將自定義可綁定屬性移動到它,而不是子類。 :) – Notoriousxl 2011-06-04 14:46:20