WinForms对象数据绑定性能问题

时间:2012-09-04 08:39:27

标签: vb.net performance data-binding

我创建了一个简单的VB .NET应用程序。 1带有2个TextBox的表单,绑定到具有2个属性Property1和Property2的类。如果我在TextBox1中输入文本,则绑定过程会导致读取第二个属性Property2。为什么?我不希望如果我更改属性,所有有界控件都会更新其数据。

代码:

' Class1.vb

Imports System.ComponentModel

Public Class Class1
  Private property1Value As String
  Public Property Property1() As String
    Get
      Return property1Value
    End Get
    Set(ByVal value As String)
      property1Value = value
    End Set
  End Property

  Private property2Value As String
  Public Property Property2() As String
    Get
      Return property2Value
    End Get
    Set(ByVal value As String)
      property2Value = value
    End Set
  End Property

End Class 

' Form1.Designer.vb

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class Form1
  Inherits System.Windows.Forms.Form

  'Form esegue l'override del metodo Dispose per pulire l'elenco dei componenti.
  <System.Diagnostics.DebuggerNonUserCode()> _
  Protected Overrides Sub Dispose(ByVal disposing As Boolean)
    Try
      If disposing AndAlso components IsNot Nothing Then
        components.Dispose()
      End If
    Finally
      MyBase.Dispose(disposing)
    End Try
  End Sub

  'Richiesto da Progettazione Windows Form
  Private components As System.ComponentModel.IContainer

  'NOTA: la procedura che segue è richiesta da Progettazione Windows Form
  'Può essere modificata in Progettazione Windows Form.  
  'Non modificarla nell'editor del codice.
  <System.Diagnostics.DebuggerStepThrough()> _
  Private Sub InitializeComponent()
    Me.components = New System.ComponentModel.Container()
    Me.TextBox1 = New System.Windows.Forms.TextBox()
    Me.TextBox2 = New System.Windows.Forms.TextBox()
    Me.Class1BindingSource = New System.Windows.Forms.BindingSource(Me.components)
    CType(Me.Class1BindingSource, System.ComponentModel.ISupportInitialize).BeginInit()
    Me.SuspendLayout()
    '
    'TextBox1
    '
    Me.TextBox1.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.Class1BindingSource, "Property1", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))
    Me.TextBox1.Location = New System.Drawing.Point(12, 12)
    Me.TextBox1.Name = "TextBox1"
    Me.TextBox1.Size = New System.Drawing.Size(100, 22)
    Me.TextBox1.TabIndex = 2
    '
    'TextBox2
    '
    Me.TextBox2.DataBindings.Add(New System.Windows.Forms.Binding("Text", Me.Class1BindingSource, "Property2", True, System.Windows.Forms.DataSourceUpdateMode.OnPropertyChanged))
    Me.TextBox2.Location = New System.Drawing.Point(12, 40)
    Me.TextBox2.Name = "TextBox2"
    Me.TextBox2.Size = New System.Drawing.Size(100, 22)
    Me.TextBox2.TabIndex = 3
    '
    'Class1BindingSource
    '
    Me.Class1BindingSource.DataSource = GetType(WindowsApplication1.Class1)
    '
    'Form1
    '
    Me.AutoScaleDimensions = New System.Drawing.SizeF(8.0!, 16.0!)
    Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font
    Me.ClientSize = New System.Drawing.Size(282, 255)
    Me.Controls.Add(Me.TextBox2)
    Me.Controls.Add(Me.TextBox1)
    Me.Name = "Form1"
    Me.Text = "Form1"
    CType(Me.Class1BindingSource, System.ComponentModel.ISupportInitialize).EndInit()
    Me.ResumeLayout(False)
    Me.PerformLayout()

  End Sub
  Friend WithEvents Class1BindingSource As System.Windows.Forms.BindingSource
  Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
  Friend WithEvents TextBox2 As System.Windows.Forms.TextBox

End Class

' Form1.vb

Imports System.ComponentModel

Public Class Form1

  Private Class1 As New Class1

  Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    Class1.Property1 = "Prop1"
    Class1.Property2 = "Prop2"
    Class1BindingSource.DataSource = Class1
  End Sub
End Class

0 个答案:

没有答案