9

バインディングのデフォルトの動作を変更する方法はありますか?

これは、ControlTemplate または Style を介して行うことができますか?

4

3 に答える 3

7

おそらく、バインディングのデフォルトをオーバーライドする方が適切な場合があります。そのためには、これを使用できます。

http://www.hardcodet.net/2008/04/wpf-custom-binding-class

次に、いくつかの CustomBinding クラス (コンストラクターで適切な既定値を設定) と MarkupExtension 'CustomBindingExtension' を定義します。次に、XAML のバインドを次のように置き換えます。

Text="{CustomBinding Path=Xy...}"

ValidatesOnDataError と NotifyOnValidationError の特定のデフォルトを設定するバインディングで同様のことを試してみましたが、あなたのケースでもうまくいくはずです。問題は、すべてのバインディングを置き換えることに慣れているかどうかですが、このタスクを自動化できます。

于 2011-08-25T08:23:00.890 に答える
1

いいえ。この動作は、 を登録するときに渡されるクラスDefaultUpdateSourceTriggerのによって処理されます。これは、継承されたクラス内およびバインディングごとにオーバーライドできますが、アプリケーション内のすべてに対してオーバーライドすることはできません。FrameworkPropertyMetadataDependencyPropertyTextBoxTextBox

于 2010-11-02T19:15:46.397 に答える
0

ピーターが提案したように、私は次のような継承されたクラスでそれを解決しました:

public class ActiveTextBox:TextBox
    {
        public ActiveTextBox()
        {
            Loaded += ActiveTextBox_Loaded;
        }

        void ActiveTextBox_Loaded(object sender, System.Windows.RoutedEventArgs e)
        {
            Binding myBinding = BindingOperations.GetBinding(this, TextProperty);
            if (myBinding != null && myBinding.UpdateSourceTrigger != UpdateSourceTrigger.PropertyChanged)
            {
                Binding bind = (Binding) Allkort3.Common.Extensions.Extensions.CloneProperties(myBinding);
                bind.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
                BindingOperations.SetBinding(this, TextBox.TextProperty, bind);
            }
        }
    }

そしてこのヘルプメソッド:

public static object CloneProperties(object o)
        {
            var type = o.GetType();
            var clone = Activator.CreateInstance(type);
            foreach (var property in type.GetProperties())
            {
                if (property.GetSetMethod() != null && property.GetValue(o, null) != null)
                    property.SetValue(clone, property.GetValue(o, null), null);
            }
            return clone;
        }

それをより良く解決する方法はありますか?

于 2010-11-03T09:22:44.377 に答える