1

私の疑問は単純です。WPF 4.5 でこの INotifyDataErrorInfo を使用して例外を表示するにはどうすればよいですか?

私はMVVMを使用しています:

これが私の見解の一部です

    <TextBox MinHeight="50"
             Text="{Binding Person.Name, Mode=TwoWay, NotifyOnValidationError=True, ValidatesOnExceptions=True}"

そして、ここに私のモデルクラスがあります。@ 文字を設定した Validate メソッドが例外をスローすることを確認します。

public class Person : DomainObject
{
    private string _name;

    public string Name
    {
        get
        {
            return this._name;
        }

        set
        {
            if (this._name != value)
            {
                this.ValidateProperty("Name", value);
                this._name = value;
                this.RaisePropertyChanged("Name");
            }
        }
    }
}

    protected override void ValidateProperty(string propertyName, object value)
    {
        if (propertyName == "Name")
        {
            var errors = new List<string>();

            var response = value as string;

            if (string.IsNullOrEmpty(response))
            {
                errors.Add("The value cannot be null or empty");
            }
            else if (response == "@")
            {
                throw new Exception("@");
            }

            this.ErrorsContainer.SetErrors(propertyName, errors);
        }
        else
        {
            base.ValidateProperty(propertyName, value);
        }
    }

それが起こると、それは本当にプログラムを停止します..そして、私の知る限り、Silverlightではこれは起こりません.

4

1 に答える 1

1

おそらくバインディング以外の場所でセッターを使用しているでしょう(そして例外をキャッチしません)。

アプリケーションをデバッグ モードで実行する必要があります。例外が発生すると、Visual Studio は例外アシスタントを表示します。

その後、スタック トレースを分析し、プログラムがこのコードをどのように呼び出しているかを確認できます。

問題が解決しない場合は、プログラムを停止させる例外のスタック トレース (Visual Studio では「未処理の例外」と呼ばれます) で質問を更新してください。

于 2012-04-02T22:33:40.120 に答える