6

以下の例では、ViewModel を Message という単一のプロパティを持つビューにバインドしています。このプロパティは、双方向バインディングで TextBox にバインドされます。このテストでは、セッターで値の強制を行い、変更されたプロパティを再度上げます。

Silverlight 4 では、これは完全に機能しました。プロパティ セッターでメッセージ プロパティが変更された場合、テキスト ボックスには新しい値が表示されます。たとえば、テキストボックスに「A」と入力してフォーカスを失うと、値が変更されたときに Aaaaaaaaaaa が表示されます。

ただし、Silverlight 5 では、これが壊れているか変更されているようです。セッターで値が変更された後、ゲッターがヒットすることはありません。間に IValueConverter を追加すると、Convert/ConvertBack メソッドがヒットしないことがわかります。バージョン 4 と 5 の間で何か根本的な変更があったようです。何か変更はありましたか? これはバグですか?

public class ViewModel : INotifyPropertyChanged
{
    private string _message;

    public event PropertyChangedEventHandler PropertyChanged;

    public string Message
    {
        get
        {
            return _message; 
        }
        set
        {
            _message = value;
            this.RaisePropertyChanged();

            if (_message.Length < 10)
            {
                _message = _message.PadRight(10, 'a');
                this.RaisePropertyChanged();
            }
        }
    }

    private void RaisePropertyChanged()
    {
        var handler = this.PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs("Message"));
        }
    }
}
4

2 に答える 2

3

この問題にはいくつかの回避策がありますが、これはSilverlight 5のバインディングデバッグ機能のバグのようです(@Ray Booysenの回答を参照)。

ただし、最初に、これは本番環境では問題ではなく、アプリケーションのデバッグ中にのみ発生することを理解することが重要です。したがって、回避策は、実際にはデバッグ環境での本番動作を再現することだけです(ただし、一部のデバッグ機能は無効になっています)。

最初の回避策は、BindingクラスのIsDebuggingEnabledという名前の静的(VB.Netで共有)フィールドを使用してバインディングデバッグを無効にすることです。そこでのドキュメントには、次の推奨事項が記載されています。

アプリケーションクラスコンストラクタでこのフィールドをfalseに設定します

注:この変更は単一のバインディングに制限することはできませんが、アプリケーション内のすべてのバインディングに影響します。

2つ目は、SilverlightアプリケーションをホストしているWebプロジェクトのプロジェクトプロパティでSilverlightデバッガーを無効にすることです。次の手順を使用して、この変更を行います。

  1. ソリューションエクスプローラーでWebプロジェクトを右クリックし、[プロパティ]を選択します。
  2. [Web]タブを選択します。
  3. [デバッガ]セクションまで下にスクロールします。
  4. Silverlightというラベルの付いたチェックボックスをオフにします。

注:この変更により、アプリケーションのバインディングデバッグだけでなく、一般的なSilverlightデバッグも無効になります。ただし、他のデバッガーを有効にすることはできます。

于 2012-10-11T10:00:41.250 に答える
1

これは、Microsoft によって Silverlight 5 のバグとして確認されています。これはデバッグ モードでのみ発生するため、リリース モードでは問題ありません。

XAML バインディングのデバッグを無効にすると、問題はなくなります。

Binding.IsDebuggingEnabled = false; 
于 2012-09-25T09:44:56.567 に答える