4 messaggi dal 06 settembre 2009
Buongiorno a tutti
Rieccomi con un altro problemino..

Allora, io ho usato per i controlli delle mie View (approccio Model-View-ViewModel) le ValidationRules per specificare le regole di Validazione: utilizzando un'attached property (my:Extensions.Validation) sono riuscito ad agganciare ad ogni controllo un certo gestore di eventi d'errore che riceve il ValidationResult.

Esempio XAML:
<TextBox my:Extensions.Validation="On">
<TextBox.Text>
<Binding Path="Descrizione" NotifyOnValidationError="True">
<Binding.ValidationRules>
<Validation:MandatoryFieldValidation/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>

Il problema è questo: io vorrei fare in modo che TUTTI i controlli che presentano una certa ValidationRule (come per esempio la MandatoryFieldValidation) abbiano un certo Stile!
Ho già tentato di usare i Property Triggers all'interno delle Risorse dell'Applicazione, però questi vedono solo le proprietà di dipendenza e non le regole di validazione... esiste un altro modo?
Grazie mille!

Adriano
E' un po' strano quello che chiedi, soprattutto perché stile e validazione sarebbero due cose separate. In effetti i trigger non ti permettono di lavorare in funzione del tipo e poi si creerebbero dei problemi nel caso tu ci metta più di una validazione.
Se usi i trigger vuol dire che a quelle textbox hai già associato uno stile, giusto? Sebbene potresti sfruttare attached property custom da mettere su ogni textbox per identificarla di un certo tipo, a questo punto ti conviene fare uno stile per ogni validatore che si basa su uno comune e cambia solo quello che ti server.
Non cercherei robe troppo complesse.

Ciao

Il mio blog
Homepage
4 messaggi dal 06 settembre 2009
Ciao Ricciolo, intanto molte grazie della risposta :)
Intendevo dirti che il mio scopo è che tutti i controlli dela UI che utilizzano una ValidationRule del tipo VALORE OBBLIGATORIO presentino un certo stile, come per esempio uno sfondo giallino.
La soluzione coi trigger che ti dicevo l'ho implementata nel file XAML contenente il ResourceDictionary dell'applicazione:

[..]
<Style x:Key="MandatoryControl" TargetType="{x:Type Control}" >
<Style.Triggers>
<Trigger Property="my:Extensions.Validation" Value="On">
<Setter Property="Background" Value="#FFEEDF9E" />
</Trigger>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>

<Style TargetType="TextBox" BasedOn="{StaticResource MandatoryControl}" />
<Style TargetType="Avalon:MaskedTextBox" BasedOn="{StaticResource MandatoryControl}" />
<Style TargetType="ListBox" BasedOn="{StaticResource MandatoryControl}" />
<Style TargetType="ComboBox" BasedOn="{StaticResource MandatoryControl}" />
[..]

Ovvero per ogni controllo interrogo l'attached property my:Extensions.Validation: se questa mi restituisce la string "On" applico lo stile altrimenti non lo applico: io però volevo fare il confronto non su questa property bensì sulla o sulle ValidationRule che il controllo incapsula attraverso l'oggetto Binding.


Non so quanto mi sia chiarito..chiedi pure ;)
Grazie ancora!

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
In primo piano

I più letti di oggi

Media
In evidenza
MISC