Вопрос по default, xaml, templates, wpf, binding – WPF: определить привязку по умолчанию

24

В WPF я хотел бы иметь возможность шаблонировать, как мои привязки применяются по умолчанию.

Например, я хочу написать:

Text="{Binding Path=PedigreeName}"

Но это было бы так, как будто я набрал:

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

Любая идея ?

Спасибо,

Patrick

Ваш Ответ

2   ответа
16

В дополнение к хорошему ответу Джо Уайта, вы также можете создать класс, который наследует от Binding и устанавливает необходимые значения свойств по умолчанию. Например :

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

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

    private void Initialize()
    {
        this.Mode = BindingMode.TwoWay;
    }
}
Это также работает в Silverlight 3+?
@vines:Text="{my:TwoWayBinding Path=PedigreeName}"
Был бы полезен пример использования XAML - не могу найти ни одного ...
Спасибо, я реализовал это таким образом. [code] открытый класс ValidationBinding: Binding {public ValidationBinding () {Initialize (); } public ValidationBinding (string path): base (path) {Initialize (); } private void Initialize () {Mode = BindingMode.TwoWay; UpdateSourceTrigger = UpdateSourceTrigger.LostFocus; NotifyOnValidationError = true; ValidatesOnDataErrors = true; ValidatesOnExceptions = true; }} [/ code] PBelanger
26

Используйте одну из перегрузокDependencyProperty.Register которые принимают PropertyMetadata. Передать экземплярFrameworkPropertyMetadata и установите его свойства.

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

Я не вижу способа установить значения по умолчанию для NotifyOnValidationError, ValidatesOnDataErrors или ValidatesOnExceptions, но я не использовал это достаточно, чтобы быть уверенным, что искать; они могут быть там.

Спасибо, хорошая идея, но в моем случае класс Dog находится в проекте бизнес-модели. Я не хочу добавлять зависимость от System.Windows для этого проекта. Решение, которое я искал для этого, было в этом направлении, что-то вроде ввода & lt; Style TargetType = & quot; {x: привязка типов} & quot; & gt; & lt; свойство Setter = & quot; режим & quot; Значение = & Quot; TwoWay & Quot; / & GT; ... & lt; Setter Property = & quot; ValidatesOnDataErrors & quot; Значение = & Quot; Правда & Quot; / & GT; & lt; Свойство Setter = & quot; ValidatesOnExceptions & quot; Значение = & Quot; Правда & Quot; / & GT; & Lt; / Стиль & GT; В App.xaml, но не нашли ничего подходящего ... Еще раз спасибо! PBelanger

Похожие вопросы