2009-07-07 3 views
24

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

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

Text="{Binding Path=PedigreeName}" 

Но было бы, как если бы я напечатал:

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

Любая идея?

Спасибо,

  • Патрик

ответ

16

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

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

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

    private void Initialize() 
    { 
     this.Mode = BindingMode.TwoWay; 
    } 
} 
+0

Спасибо, я закончил тем, что использовал его. [код] public class ValidationBinding: Binding { public ValidationBinding() { { Инициализировать(); } public ValidationBinding (строковый путь) : base (path) { { Инициализировать(); } private void Инициализация() { Режим = BindingMode.TwoWay; UpdateSourceTrigger = UpdateSourceTrigger.LostFocus; NotifyOnValidationError = true; ValidatesOnDataErrors = true; ValidatesOnExceptions = true; } } [/ code] – PBelanger

+0

Это также работает в Silverlight 3+? –

+0

Пример использования XAML был бы велик - не может найти ... – vines

25

Используйте один из перегруженных 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, но я не использовал этого достаточно, чтобы быть уверенным, что искать; они могут быть там.

+0

Спасибо, хорошая идея, но в моем случае класс Dog находится в проекте бизнес-модели. Я не хочу добавлять зависимость от System.Windows для этого проекта. Решение, которое я искал, было в этом направлении, что-то вроде размещения В App.xaml, но ничего опять соответствия ... Спасибо не найден! – PBelanger

Смежные вопросы