WPF中数据绑定的问题

laferce 2009-10-29 10:13:10
我刚学WPF,刚了解了数据绑定,现在想实现一些比较复杂的功能,示例在下面:

'--------------------源对象
Public bigobj As New Big
'--------------------数据
Public Class Big
Private _d1 As Little1
Private _d2 As Little2
Public Property D1() As Little1
Get
Return _d1
End Get
Set(ByVal value As Little1)
_d1 = value
End Set
End Property
Public Property D2() As Little2
Get
Return _d2
End Get
Set(ByVal value As Little2)
_d2 = value
End Set
End Property
End Class

Public Class Little1
Private _x(5) As Integer
Public Property X(ByVal i As Integer) As Integer
Get
Return _x(i)
End Get
Set(ByVal value As Integer)
_x(i) = value
'????
End Set
End Property
End Class

Public Class Little2
Private _y As Integer
Public Property Y() As Integer
Get
Return _y
End Get
Set(ByVal value As Integer)
_y = value
'????
End Set
End Property
End Class
'--------------------控件
Public Class MyCanvas
Inherits Canvas
Private Tx(5), Ty As TextBox
Public Sub New()
CreateBinding()
End Sub
Public Sub CreateBinding()
Dim bind As New Binding()
'????
End Sub
End Class

Little1里面有个数组,Little2里面有个数,我想在加载 MyCanvas 实例的时候创建绑定,将 Tx(0-5) 绑定到 bigobj.D1.X(0-5),Ty 绑定到 bigobj.D2.Y,只用那一个 bind 对象来完成,问号处代码怎么写呢?(包括 CreateBinding 方法和两个小类里面的属性改变通知程序哈,因为我想要了解 INotifyPropertyChanged 接口在这种情况下的用法)
...全文
89 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
laferce 2009-10-31
  • 打赏
  • 举报
回复
现在我的绑定源是对象 bigobj,绑定属性是“对象的成员对象的成员数组的元素”,是不是应该采用

bind = New Binding("D1.X(0)")

这种语法,引号内的点和括号能不能正确解释呢?是不是 Big 和 Little 都需要分别实现 INotifyPropertyChanged 接口呢?用同一个 Binding 对象分别创建多组绑定关系:

Private Sub CreateBinding()
Dim bind As New Binding
bind.Source = bigobj
For i As Int32 = 0 To 5
bind.Path = New PropertyPath("D1.X(" & i & ")")
Tx(i).SetBinding(TextBox.TextProperty, bind)
Next
bind.Path = New PropertyPath("D2.Y")
Ty.SetBinding(TextBox.TextProperty, bind)
End Sub

这样写可以吗,会不会后面创建的覆盖了前面创建的从而让前面的失效?不好意思,贪心了点,主要是现在没有条件测试,只好先问好,谢谢:)
xingjunli 2009-10-30
  • 打赏
  • 举报
回复

VB.net没接触过
支持
[Quote=引用 1 楼 jv9 的回复:]
首先需要引用接口INotifyPropertyChanged,然后对事件进行调用。

VB.NET codePublicEvent PropertyChangedAs PropertyChangedEventHandlerImplements System.ComponentModel.INotifyPropertyChanged.PropertyChangedPublicSub OnPropertyChanged(ByVal eAs PropertyChangedEventArgs)IfNot PropertyChangedEventIsNothingThenRaiseEvent PropertyChanged(Me, e)EndIfEnd SubPublicSub OnPropertyChanged(ByVal propNameAsString)IfNot PropertyChangedEventIsNothingThenRaiseEvent PropertyChanged(Me,New PropertyChangedEventArgs(propName))EndIfEnd Sub
   
在需要binding的属性下调用


VB.NET codePublicProperty D1()As Little1GetReturn _d1EndGetSet(ByVal valueAs Little1)
_d1= value
OnPropertyChanged("D1")EndSetEnd Property

这样,当数据源改变,会发出通知。



[/Quote]
jv9 2009-10-30
  • 打赏
  • 举报
回复
首先需要引用接口INotifyPropertyChanged,然后对事件进行调用。


Public Event PropertyChanged As PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged
Public Sub OnPropertyChanged(ByVal e As PropertyChangedEventArgs)
If Not PropertyChangedEvent Is Nothing Then
RaiseEvent PropertyChanged(Me, e)
End If
End Sub

Public Sub OnPropertyChanged(ByVal propName As String)
If Not PropertyChangedEvent Is Nothing Then
RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(propName))
End If
End Sub


在需要binding的属性下调用



Public Property D1() As Little1
Get
Return _d1
End Get
Set(ByVal value As Little1)
_d1 = value
OnPropertyChanged("D1")
End Set
End Property



这样,当数据源改变,会发出通知。




jv9 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 laferce 的回复:]
PropertyChangedEvent 是如何定义的呢?
[/Quote]


按照我上面的代码定义就好了。
laferce 2009-10-30
  • 打赏
  • 举报
回复
PropertyChangedEvent 是如何定义的呢?

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧