WPF : Define binding's default

2019-03-12 00:59发布

In WPF, I would like to be able to template how my bindings are applied by default.

For instance, I want to write :

Text="{Binding Path=PedigreeName}"

But it would be as if I had typed :

Text="{Binding Path=PedigreeName, Mode=TwoWay, UpdateSourceTrigger=LostFocus, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True}" 

Any idea ?

Thanks,

  • Patrick

2条回答
三岁会撩人
2楼-- · 2019-03-12 01:34

Use one of the overloads of DependencyProperty.Register that take a PropertyMetadata. Pass an instance of FrameworkPropertyMetadata and set its properties.

public class Dog {
    public static readonly DependencyProperty PedigreeNameProperty =
        DependencyProperty.Register("PedigreeName", typeof(string), typeof(Dog),
            new FrameworkPropertyMetadata() {
                BindsTwoWayByDefault = true,
                DefaultUpdateSourceTrigger = UpdateSourceTrigger.LostFocus
            }
        );

I don't offhand see a way to set the defaults for NotifyOnValidationError, ValidatesOnDataErrors, or ValidatesOnExceptions, but I haven't used this enough to be sure what to look for; they may be there.

查看更多
Animai°情兽
3楼-- · 2019-03-12 01:54

In addition to Joe White's good answer, you could also create a class that inherits from Binding and sets the default property values you need. For instance :

public class TwoWayBinding : Binding
{
    public TwoWayBinding()
    {
        Initialize();
    }

    public TwoWayBinding(string path)
      : base(path)
    {
        Initialize();
    }

    private void Initialize()
    {
        this.Mode = BindingMode.TwoWay;
    }
}
查看更多
登录 后发表回答