Domanda

Io sto guardando i componenti WPF nella casella degli strumenti, ma non riesco a trovare il provider di errore che è presente nel 2005/2008.

E 'rimosso?

È stato utile?

Soluzione

ErrorProvider è un controllo WinForms . Non esiste un equivalente in WPF. Ma si sarà ancora in grado di trovare in in Visual Studio 2008, se si crea un progetto forme vittoria.

Si potrebbe voler dare un'occhiata a questo articolo sul Errore di convalida in WPF . Ha alcuni utili suggerimenti e idee su come gestire la convalida.

Altri suggerimenti

.NET 3.5 aggiunto il supporto per WPF IDataErrorInfo: la validazione dei dati in .NET 3.5 .

Per prima cosa mi scusi per commentare un tale vecchia discussione, ma questo potrebbe aiutare come ho avuto esattamente la stessa domanda, e il collegamento di Simon mi ha aiutato a "iniziare con qualcosa di"

ho potuto testare Simon P.Stevens tutorial, ma onestamente non mi piace più di tanto:

  • Uso responseTemplate rende la risposta più lenta quando si visualizza l'errore.
  • Questo funziona solo se la regola è sempre la stessa per una stessa classe (nel mio caso ho alcune grandezze, che a volte possono essere negativi, a volte no).
  • Nel caso di una domanda internazionalizzato (nel mio caso), le librerie esterne non hanno accesso alle risorse in cui sono traduzioni, quindi non è possibile impostare appropriato messaggio.

Credo che utilizzando MVVM è molto ben adatta a gestire qualsiasi situazione:

ho impostato la mia TextBox, con un BorderBrush e descrizione comandi, per quanto riguarda le mie condizioni mi nascondere / visualizzare descrizione comandi e bordo di colore:

XAML:

<TextBox x:Name="tbName" Grid.Column="1" Grid.Row="0" Margin="3" LostFocus="tbName_LostFocus" BorderBrush="{Binding BordertbName}"
                 Text="{Binding MonRepere.Nom}" ToolTipService.ToolTip="{Binding ErrorName}" ToolTipService.IsEnabled="{Binding ToolTipNameEnable}"/>

Codice Dietro (LostFocus = Lascia per i quali utilizzato per WindowsForm):

private void tbName_LostFocus(object sender, RoutedEventArgs e)
    {
        if(tbName.Text=="")
        {
            this.mv.ErrorName = Properties.Resources.ErrorEmpty;

        }
        else
        {
            mv.ErrorName = "";
        }
    }

Poi ViewModel:

private string errorName;
            public string ErrorName
            {
                get { return errorName; }
                set
                {
                    errorName = value;
                    if (value == "")
                    {
                        ToolTipNameEnable = false;
                        BordertbName = Brushes.Gray;
                    }
                    else
                    {
                        ToolTipNameEnable = true;
                        BordertbName = Brushes.Red;
                    }
                    this.NotifyPropertyChanged("ErrorName");
                }
            }
            private Brush bordertbName;
            public Brush BordertbName
            {
                get { return bordertbName; }
                set
                {
                    bordertbName = value;
                    this.NotifyPropertyChanged("BordertbName");
                }
            }
            private bool toolTipNameEnable;
            public bool ToolTipNameEnable
            {
                get { return toolTipNameEnable; }
                set
                {
                    toolTipNameEnable = value;
                    this.NotifyPropertyChanged("ToolTipNameEnable");
                }
            }

Proprio molto utile quando le regole sono specifiche per quanto riguarda la situazione.

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