0

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 を使用してバインドできるという目的を無効にしているようです。

これを解決する方法に関するヒントはありますか?

ありがとう、ロブ。

4

1 に答える 1

0

PropertyChangedクラスのプロパティでイベントを発生させる必要がありますMerchandise。したがって、そのクラスはINotifyPropertyChanged、ビューモデルクラスだけでなくインターフェイスも実装する必要があります。そうしないと、UI は何かが変更されたことを認識しません。

于 2015-04-19T13:22:17.600 に答える