【问题标题】:Silverlight 5 INotify OnPropertyChanged not triggered?Silverlight 5 INotify OnPropertyChanged 未触发?
【发布时间】:2012-10-28 02:46:48
【问题描述】:

如果我将 TextBox 绑定到对象的(商品是对象)属性,例如:

Text="{Binding Path=Merchandise.Quantity, Mode=TwoWay}

<TextBox x:Name="QuantityTextBox" Grid.Column="1" Grid.Row="5" Width="70" Text="{Binding Path=Merchandise.Quantity, Mode=TwoWay, TargetNullValue='0', FallbackValue='0', ValidatesOnExceptions=True, ValidatesOnDataErrors=True, NotifyOnValidationError=True}"/>

DataContext 设置为我的 ViewModel,其中包含(以及其他属性)类型 Merchandise 的声明属性。

    Implements INotifyPropertyChanged, IDataErrorInfo

Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged

Public Sub OnPropertyChanged(ByVal e As PropertyChangedEventArgs)

    If PropertyChangedEvent IsNot Nothing Then

        RaiseEvent PropertyChanged(Me, e)

        Select Case e.PropertyName


            Case "Merchandise"

                DoSomething()

            Case Else

        End Select

    End If

End Sub


 Private _Merchandise As DC.SL.Services.WebServiceMerchandise.Merchandise
Public Property Merchandise() As DC.SL.Services.WebServiceMerchandise.Merchandise
    Get
        Return _Merchandise
    End Get
    Set(ByVal value As DC.SL.Services.WebServiceMerchandise.Merchandise)
        _Merchandise = value
        OnPropertyChanged(New PropertyChangedEventArgs("Merchandise"))
    End Set
End Property

当我在 TextBox 中输入更改时,不会触发 PropertyChanged 事件。我可以解决这个问题的唯一方法是在我的 ViewModel 中创建重复的属性......即数量,然后当单击 Ok 按钮时,我将 ViewModel 属性分配给我的 Merchandise 对象。但这绝对不是有效的,似乎违背了能够使用 Path=SomeObject.Property 进行绑定的目的。

关于如何解决这个问题的任何提示?

谢谢,罗伯。

【问题讨论】:

  • 请在 ViewModel 中显示 Merchandise 属性并使用代码格式:)
  • 用代码块更新了原始帖子。我希望有一种简单的方法可以使用 Binding Path=Object.Property 和 PropertyChanged 通知。正确的输入文本存储在 Merchandise.Quantity 中,但没有触发 PropertyChanged 事件。
  • 休...你确定你有正确的数据上下文?如果你在 setter 中设置断点?

标签: silverlight binding


【解决方案1】:

您需要在 Merchandise 类的属性上引发 PropertyChanged 事件。因此该类需要实现INotifyPropertyChanged 接口以及您的视图模型类。否则,UI 不知道发生了什么变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多