2009-10-20 10 views
7

Ich habe einen Texteingabebereich wie folgt definiert:Programmatische Änderung in WPF TextBox Gültigkeitsregel

<TextBox> 
     <TextBox.Text> 
      <Binding Path="MyProperty"> 
       <Binding.ValidationRules> 
        <valid:MyValidator/> 
       </Binding.ValidationRules> 
      </Binding> 
     </TextBox.Text> 
    </TextBox> 

Mein Problem ist, dass auf einer anderen Einstellung abhängig, was sollte hier variiert eingefügt werden. Daher sollte sich das Validierungsverhalten der Eingabedaten ändern.

Wie kann ich im Code dahinter die aktive Validierungsregel für eine bestimmte Textbox ändern?

+0

mit einem Konverter? – Natrium

+0

Ich dachte, Konverter war mehr darauf ausgerichtet, die eingehenden Daten zu ändern (konvertieren)? Ich möchte die aktive Validierungsregel vollständig ersetzen, ohne die Eingabe zu ändern, die der Benutzer gab. – Mizipzor

Antwort

19

Verwenden Sie BindingOperations.GetBinding(), um das Binding-Objekt für den TextBox.Text abzurufen. Bearbeiten Sie anschließend die ValidationRules-Auflistung der Bindung, so wie Sie es für richtig halten.

Binding binding = BindingOperations.GetBinding(myTextBox, TextBox.TextProperty); 
binding.ValidationRules.Clear(); 
binding.ValidationRules.Add(myCrazyValidationRule); 
+0

Das scheint genau das zu sein, was ich will, ich probiere es aus und komme zurück, um deine Antwort zu akzeptieren. :) – Mizipzor

+2

@itowlson Nun haben Sie eine Idee, dies in XAML zu tun, indem Sie MVVM Muster folgen? – RobinAtTech

+0

Ich mochte diese humorvolle Note "myCrazyValidationRule" – Tarik

1

Die hacky-Lösung, die den Sinn kommt, ist ein Textfeld für jede der Validierungsregeln zu definieren, die in der Lage festgelegt werden sollte. Binden Sie ein Textfeld an jede der Validierungsregeln. Dann, je nach externer Einstellung/Bedingung, alle Textfelder ein- oder ausblenden, außer demjenigen mit der Validierungsregel, die angewendet werden soll.

+0

Dies ist eine ausgezeichnete Lösung, haben Sie eine Idee, itowlson Antwort in MVVM Muster zu verwenden? – RobinAtTech