2009-10-20 14 views
7

Ho un area di immissione testo definito in questo modo:programmazione cambiamento regola di convalida in WPF TextBox

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

Il mio problema è che, a seconda un'altra impostazione, quello che dovrebbe essere inserita qui varia. E quindi, il comportamento di convalida dei dati di input dovrebbe cambiare.

Come posso nel codice sottostante modificare la regola di convalida attiva per una determinata casella di testo?

+0

con un convertitore? – Natrium

+0

Pensavo che i convertitori fossero più mirati a cambiare (convertire) i dati in arrivo? Voglio sostituire completamente la regola di convalida attiva, senza modificare l'input che l'utente ha dato. – Mizipzor

risposta

19

Utilizzare BindingOperations.GetBinding() per ottenere l'oggetto Binding per TextBox.Text. Quindi manipola la raccolta ValidationRules dell'associazione come meglio credi.

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

Questo sembra essere esattamente quello che voglio, lo proverò e tornerò ad accettare la tua risposta. :) – Mizipzor

+2

@itowlson Beh, hai qualche idea per farlo in XAML seguendo il pattern MVVM? – RobinAtTech

+0

Mi è piaciuto quel tocco umoristico "myCrazyValidationRule" – Tarik

1

La soluzione più hacky che viene in mente è quello di definire una casella di testo per ciascuna delle regole di convalida che dovrebbero essere in grado di essere impostato. Associare una casella di testo a ciascuna delle regole di convalida. Quindi, a seconda delle impostazioni/condizioni esterne, comprimi/nascondi tutte le caselle di testo tranne quella con la regola di convalida da applicare.

+0

Questa è una soluzione eccellente, btw avete qualche idea di utilizzare itowlson risposta in pattern MVVM? – RobinAtTech