我只有在完成其所有初始数据绑定时,才需要更改某个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