【问题标题】:DataGridView bound with iNotifyPropertyChanged object questionDataGridView 绑定 iNotifyPropertyChanged 对象问题
【发布时间】:2010-06-23 19:18:42
【问题描述】:

我有一个绑定到 BindingList 的派生 DataGridView,并且该对象实现了 iNotifyPropertyChanged。

我想做以下事情:当我附加到我的 DataGridView 的属性发生更改时,我想调用一个函数来更新我的一个列的标题。

基本上,我想将我的 OWN 响应添加到 PropertyChanged 事件。不幸的是,我找不到自己订阅事件的钩子\句柄在哪里。

提前致谢!

编辑:
我采取的解决方案是前两个答案的混合体。我最终订阅了 ListAdded\Changed 事件,并且能够从那里获得足够的上下文来更新我的所有函数。

【问题讨论】:

    标签: c# .net data-binding forms datagridview


    【解决方案1】:

    您应该覆盖以下方法: OnDataMemberChanged http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.ondatamemberchanged.aspx OnDataSourceChanged http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.ondatasourcechanged.aspx

    在这些方法中,您应该使用 ListBindingHelper 类 http://msdn.microsoft.com/en-us/library/system.windows.forms.listbindinghelper.aspx 和他的 GetList 方法来获取表示绑定到 DataGridView 的列表的实际对象。您应该尝试将其转换为 IBindingList,如果您使用 .NET FW 3.5 或更高版本,请尝试将其转换为 INotifyCollectionChanged 接口,并订阅相应的事件。

    【讨论】:

    • 在 .net 2.0 中工作...我会看看我能走多远,看看我是否能从那里抓住它们。我不一定需要确切地弄清楚哪些属性发生了变化,只要我能确定某些属性发生了变化即可。如果 ListChanged 每次都被触发,它会成功。
    【解决方案2】:

    在 BindingList 上,查看 ListChanged 事件。

    编辑:http://msdn.microsoft.com/en-us/library/ms132742.aspx 表示事件发生在“列表或列表中的项目更改时”(即,当列表中对象的 PropertyChanged 事件被触发时)。

    【讨论】:

    • 那是响应 PropertyChanged 事件的位置吗?
    【解决方案3】:

    我认为你想处理BindingSource.CurrentItemChanged 事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-07-31
      • 2013-05-28
      • 2010-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多