【问题标题】:DataBound UserControl and PropertyNameChanged Event problem in .net winforms.net winforms 中的 DataBound UserControl 和 PropertyNameChanged 事件问题
【发布时间】:2010-12-11 13:44:07
【问题描述】:

我有一个用户控件,带有一个文本框和一个数据绑定属性 - 值。 值可以是任何对象,例如颜色、数组、字体等。 每当文本更改时,只要属性值有效,就会更改。

看msdn文章:How to: Apply the PropertyNameChanged Pattern ,它说我应该使用PropertyNameChanged Event pattern 从控制端。

现在,如果我有 DataSourceUpdateMode = OnValidate,那么我什至不需要应用此模式。如果,说。我的 Value 属性绑定到业务对象中的颜色字段,然后在我在文本框中键入 red 后,在另一个字段中使用选项卡,然后表单上绑定到相同颜色字段的任何其他字段都会立即更新。

但是,如果我的 DataSourceUpdateMode = OnPropertyChange,我希望表单上的所有其他字段在我按下“d”后立即更新(如 re'd')。

这不会发生。 所以,我应用了前面提到的 PropertyNameChanged 模式,它仍然没有发生。

但是,如果我删除 PropertyNameChanged 事件并改为使用 INotifyPropertyChanged,它会完美运行。

我的问题是,根据文章,INotifyPropertyChanged 应该由您的业务对象使用,而不是用户控件。

它有效,但我不想遇到任何未来的问题。

有人知道发生了什么吗?

预计到达时间:

假设可以使用 INotifyPropertyChanged,我现在还有一个问题。 我不希望用户必须订阅“PropertyChanged”事件,然后检查参数以查看属性“Value”是否发送了它。 所以,我补充说:

Public Event ValueChanged As EventHandler(Of EventArgs)

这会破坏绑定。源代码甚至在验证时都没有更新,更不用说属性更改了。

我想我必须将 ValueChanged 事件重命名为 FeckingValueChanged 之类的。

如果框架实际上首先对引发的 ValueChange 事件做了什么,我不会太介意!

【问题讨论】:

    标签: .net vb.net data-binding inotifypropertychanged


    【解决方案1】:

    好的,我发现 MSDN 提供的代码不正确。 下面,我突出显示了不正确的部分并显示了更正:

    不正确

    Public DataSourceChanged As EventHandler
    
    Private Sub OnDataSourceChanged() 
        If (DataSourceChanged IsNot Nothing) Then
            DataSourceChanged(Me, New EventArgs())
        End If
    End Sub
    

    正确

    Public **Event** DataSourceChanged As EventHandler
    
    Private Sub OnDataSourceChanged() 
        If (DataSourceChangedEvent IsNot Nothing) Then
            **RaiseEvent** DataSourceChanged(Me, New EventArgs())
        End If
    End Sub
    

    我发现您必须以这种精确的方式声明此事件,否则数据绑定 OnPropertyChanged 将不起作用。

    例如,由于某种原因,以下内容将不起作用:

    Public Event DataSourceChanged As EventHandler(Of EventArgs)

    使用 INotifyPropertyChanged 也可以,但您不能同时拥有预期的 PropertyNameChanged 事件,用户希望能够订阅该事件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      • 2021-02-24
      • 2011-01-13
      • 2011-03-12
      • 2010-09-06
      • 1970-01-01
      相关资源
      最近更新 更多