【发布时间】: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