TextBox をオブジェクトの (Merchandise がオブジェクトである) プロパティにバインドすると、次のようになります。
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 は、Merchandise 型の宣言されたプロパティを (他のプロパティと共に) 含む ViewModel に設定されます。
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 に重複したプロパティを作成することです。つまり、Quantity を作成し、後で [OK] ボタンをクリックして、ViewModel プロパティを Merchandise オブジェクトに割り当てました。しかし、これは間違いなく効率的ではなく、Path=SomeObject.Property を使用してバインドできるという目的を無効にしているようです。
これを解決する方法に関するヒントはありますか?
ありがとう、ロブ。