1

我正在尝试将结构成员绑定到Windows FormsLabel中的 s 。但是,我不能这样做,因为这个结构是一个类的成员,我需要将几个成员绑定到标签。

假设这个结构是 a System.Drawing.Point,我想将XY属性绑定到 a Label

Imports System.ComponentModel
Public Class Form1
    Implements INotifyPropertyChanged

    Private _pt As Point
    Public Property Pt As Point
        Get
            Return _pt
        End Get
        Set(value As Point)
            _pt = value
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs("Pt"))
        End Set
    End Property


    Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load
        Label1.DataBindings.Add("Text", Me, "Pt")
        Label2.DataBindings.Add("Text", Me.Pt, "X")
        Label3.DataBindings.Add("Text", Me, "Pt.Y")
    End Sub

    Public Event PropertyChanged(sender As Object, e As System.ComponentModel.PropertyChangedEventArgs) Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged

End Class

如果我设置bindingsourcetoMedatamemberto 结构,那么Label1将显示ToString()方法的结果、属性的Label2值并且不会改变。XLabel3

Point但是如果我为属性分配一个新的Pt,那么只会Label1更新它的值。Label2不会因为datasource不再一样。此外,Label3.DataBindings.Add("Text", Me, "Pt.Y")也不起作用,因为它不可能datamember是“子成员”。

我还尝试制作一个实现INotifyPropertyChanged其所有属性的新结构,但没有运气。

即使我为它分配了新的结构,有没有办法进行绑定Label2或可能?Label3

我的目标是通过数据绑定Point为属性分配新值并Me.Pt观察其值。Pt.XPt.YLabel2Label3

4

2 回答 2

0

你几乎做对了。Label1并将Label3按原样工作。改变

Label2.DataBindings.Add("Text", Me.Pt, "X")

Label2.DataBindings.Add("Text", Me, "Pt.X")

并且Label2也将开始工作。

只需确保您通过属性而不是通过您的_pt字段分配新值。

于 2013-01-27T22:39:14.680 回答
0

我建议使用仅返回 and 值的方法将属性Pt_X和添加Pt_Y到您的表单中。此外,您应该让您的属性设置器检查是否或将要更改,如果是,则引发适当的事件。Get_pt.X_pt.YPt_pt.X_pt.Y

或者,您可以定义一个类作为Point类和标签之间的接口。任何更改pt都会通知此类,然后该类将计算标签中应该包含的内容并将其转发给相关标签。

于 2013-01-27T22:51:03.220 回答