4

昨日、MVVMでの検証について質問しましたが、誰かがコードの一部で返信しました:https ://stackoverflow.com/a/13387724/

このコードを理解しようとしていますが、インデクサーの部分がわかりません。誰かがそのコードがどのように機能するかを私に説明できますか?IDataErrorInfoを使用するときにget/setが正確に呼び出されるのはいつですか。また、get-partでthis [columnName]を返すのはなぜですか?

ありがとう

4

1 に答える 1

2

私がこれを書いているとき、彼のコードはバグだらけです。ter が呼び出されると、getStackOverflowException がスローされます。

バインディングが検証を実行するように構成されている場合

<TextBox Text="{Binding Hurr, ValidatesOnDataErrors=true}" />

バインディング システムは、データ ソース オブジェクトがIDataErrorInfoを実装している場合、そのインターフェイスの 2 つのメソッドを使用して検証を実行します。

インターフェイスのインデクサーは、検証するプロパティの名前である文字列を受け取り、プロパティの現在の値の検証エラーがある場合はその文字列を返します。

これの例は次のようになります...

var pet = new Pet();
var error = pet["Name"]; //"Your pet has no name!"
pet.Name = "Fido";
error = pet["Name"]; //"Come on, how unoriginal is that?"

彼の特定のコード サンプルは、変わった getter/setter で検証を処理しています。これは、実装がどうあるべきかという普遍的な例ではありませんIDataErrorInfoが、彼自身の個人的なコードから彼自身の個人的なタッチを切り取ったものである可能性が高いです。ほとんどの人はそれを実装する独自の方法を持っていますが、9/10 倍の確率で、プロパティ名がすべて個々の sであるswitchステートメントになります。case

于 2012-11-15T14:31:20.650 に答える