2010-06-29 6 views
7

Ich habe etwa 100 TextBoxes in einem Formular. Ich muss sie validieren, wenn sie zum Beispiel dezimal sind. Das funktioniert, aber es ist zu ausführlich, ich möchte nicht 800 anstelle von 100 Zeilen in XAML haben.Howto WPF Bindung geschrieben Inline = Kurzform

Gibt es eine Möglichkeit, wie es in die kurze Form wie folgt umgeschrieben werden? :

Text="{Binding MyPath, UpdateSourceTrigger='PropertyChanged', StringFormat='{}{0:N}', NotifyOnValidationError=True, ValidationRules NOW WHAT?}" 

Antwort

6

Kurze Antwort: Sie können nicht. Die Validation-rules-Eigenschaft ist eine Auflistung und es gibt derzeit keine Möglichkeit, diese in die Binding-Kurzschrift zu schreiben.

Sie können jedoch eine Klasse erstellen, von Bindung, wie dieses vererben:

public class SuperBinding:Binding 
{ 
    public SuperBinding() 
    { 
     UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
     ValidationRules.Add(new MyValidationRule{ValidationType = typeof(decimal)}); 
     //set rest of properties 
    } 
} 

Und verwenden Sie dann, dass anstelle des normalen Binding-Tages.

2

Wenn Sie Ihre 100 Textfelder in einer Liste Container-Steuerelement, wie eine ListBox oder Listview enthalten sind, können Sie diese Bindung in eine Datatemplate setzen. Dann würde die Validierungsregel auf jeden Artikel angewendet werden.

Da es möglich ist, jedes Containersteuerelement neu zu erstellen, können Sie immer noch das gewünschte Layout erhalten.