Domanda

Sto cercando di utilizzare la convalida in WPF.Ho creato una NotNullOrEmptyValidationRule come mostrato di seguito:

public class NotNullOrEmptyValidationRule : ValidationRule
    {
        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            if (String.IsNullOrEmpty(value as String))
                return new ValidationResult(false, "Value cannot be null or empty");

            return new ValidationResult(true, null); 
        }
    }

Ora devo usarlo nella mia applicazione.Nel mio file App.xaml ho dichiarato lo stile per TextBox.Ecco la dichiarazione.

 <Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">

            <Setter Property="Background" Value="Green"/>

            <Style.Triggers>

                <Trigger Property="Validation.HasError" Value="True">

                    <Setter Property="Background" Value="Red"/>
                    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=(Validation.Errors)[0].ErrorContent}"/>

                </Trigger>

            </Style.Triggers>

        </Style>

Ora, voglio usarlo sul mio TextBox, quindi sto usando il seguente codice:

  <TextBox Style="{StaticResource textBoxStyle}">
                <TextBox.Text>
                    <Binding>
                        <Binding.ValidationRules>
                            <NotNullOrEmptyValidationRule />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>


            </TextBox>

L'errore si verifica sul tag NotNullOrEmptyValidationRule.Il controllo della sintassi XAML non è in grado di risolvere NotNullOrEmptyValidationRule.Ho anche provato a inserire lo spazio dei nomi ma non sembra funzionare.

È stato utile?

Soluzione

vedo che la tua associazione sulla casella di testo è impostata su un percorso di "Testo": è un campo su qualunque sia il contesto dati di questa casella di testo?la casella di testo riceve effettivamente un valore inserito?inoltre, se inserisci un punto di interruzione nel tuo metodo di convalida, viene mai licenziato?

potresti voler cercare come registrare gli errori nell'associazione ed esaminare anche quelli.

Altri suggerimenti

Devi solo aggiungere xmlns alla tua finestra e usarlo per fare riferimento a ValidationRule.

In WPF, l'oggetto può essere utilizzato perfettamente dallo stesso assembly.

Poiché la tua regola non è definita nello spazio dei nomi XAML standard, devi creare una mappatura al tuo spazio dei nomi clr in questo modo:

<Window ...
    xmlns:local="clr-namespace:MyNamespaceName">

E poi lo useresti in questo modo:

<Binding Path=".">
    <Binding.ValidationRules>
        <local:NotNullOrEmptyValidationRule />
    </Binding.ValidationRules>
</Binding>

ModificareHo aggiunto un'istruzione Path al Binding.Devi dire al Binding a cosa associarti :)

Non hai questa riga nel tuo codice dietro

Public Sub New()

    ' This call is required by the Windows Form Designer.
    InitializeComponent()

    Me.**NameOfTextBox**.DataContext = Me
End Sub

È presente un bug in Visual Studio ed Expression Blend che causa questo problema.Ciò che devi fare è assicurarti che la regola di convalida sia in un progetto/assieme separato a cui puoi fare riferimento.Questo dovrebbe risolvere il problema.

Tuttavia, dovrai aggiungere nuovamente lo spazio dei nomi affinché funzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top