2009-07-07 11 views
24

W przypadku WPF, chciałbym móc szablonować sposób domyślnego stosowania powiązań.WPF: Określ domyślne ustawienie wiązania

Na przykład, chcę napisać:

Text="{Binding Path=PedigreeName}" 

Ale byłoby jakbym wpisane:

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

jakiś pomysł?

Dzięki,

  • Patrick

Odpowiedz

16

Oprócz dobrej odpowiedzi Joe White'a można również utworzyć klasę dziedziczącą po powiązaniu i ustawiającą domyślne wartości właściwości, których potrzebujesz. Na przykład:

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

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

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

Dzięki, skończyłem wdrażanie w ten sposób. [kod] public class ValidationBinding: Oprawa { public ValidationBinding() { Initialize(); } public ValidationBinding (ścieżka ciągu) : podstawa (ścieżka) { Initialize(); } prywatne miejsce inicjowania() { Tryb = BindingMode.TwoWay; UpdateSourceTrigger = UpdateSourceTrigger.LostFocus; NotifyOnValidationError = true; ValidatesOnDataErrors = true; ValidatesOnExceptions = true; } } [/ code] – PBelanger

+0

Czy to też działa w Silverlight 3+? –

+0

Przykład użycia XAML byłby świetny - nie można znaleźć żadnego ... – vines

25

Użyj jednej z przeciążeń DependencyProperty.Register które wymagają PropertyMetadata. Przekaż instancję z FrameworkPropertyMetadata i ustaw jej właściwości.

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

ja nie bezceremonialny zobaczyć sposób ustawienia domyślne dla NotifyOnValidationError, ValidatesOnDataErrors lub ValidatesOnExceptions, ale nie zostały wykorzystane, to wystarczy, aby upewnić się, czego szukać; mogą tam być.

+0

Dzięki, niezły pomysł, ale w moim przypadku klasa Dog jest w projekcie modelu biznesowego. Nie chcę dodawać zależności do System.Windows dla tego projektu. Rozwiązanie, którego szukałem, było w tym kierunku, coś w rodzaju umieszczania W App.xaml, ale nie znaleziono niczego ponownie dopasowanie ... Dzięki! – PBelanger