テンプレート列のあるデータグリッドがあり、そのテンプレートにはテキストボックスがあります。これは、itemssourceを構成するコレクション内のオブジェクトの「Quantity」プロパティにバインドされています。数量は整数です。データグリッドにアイテムを追加すると、アイテムのPropertyChangedイベントにイベントハンドラーが追加されます。
EnteredPart.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(p_PropertyChanged);
これは、ユーザーがテキストボックスに整数を入力すると正常に機能します... p_PropertyChangedハンドラーが起動し、ボタンを無効にして、必要に応じて数量を変更できます。ユーザーが非整数を入力しても、ハンドラーは呼び出されず、テキストボックスの周りに赤いアウトラインが表示されます。このため、必要なときに必要なボタンを無効にすることはできません(数量が合法でない場合は無効にする必要があります)。これについて何かできる方法はありますか?
編集: Quantityプロパティを文字列に変更しようとしましたが、これにより、非整数値が入力されたときにプロパティ変更ハンドラーが呼び出されました。ただし、テキストボックスに検証を追加してこれを確認し、Validateメソッドがfalseを返した場合、プロパティ変更ハンドラーは再びヒットしなくなります。検証とプロパティ変更の両方の通知を受け取る方法はありますか?
編集2:ここで私が抱えているこの問題の別の例を別の場所で。電話番号を追加/編集するためのフォームがあります。電話番号のテキストボックスは次のようになります。
<TextBox >
<TextBox.Text>
<Binding Path="Phone.Number">
<Binding.ValidationRules>
<local:PhoneValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
保存ボタンをクリックしたら、ビューモデルで番号が有効かどうかを確認する必要があります。有効でない場合は、保存コマンドを実行したくないためです。ただし、検証が失敗した場合、Phone.Numberプロパティの値がnullになり、saveコマンドを実行する必要があるかどうかを確認する方法がないため、これを行う方法はないようです。エラー状態(Validation.GetErrorsで機能すると思いましたが、機能しない)にアクセスするか、ビューモデルでは使用できないテキストボックス内の実際のテキストにアクセスする必要があります。