Pregunta

Estoy buscando componentes WPF en la caja de herramientas, pero no puedo encontrar el proveedor de errores que está presente en 2005/2008.

¿Se elimina?

¿Fue útil?

Solución

la ErrorProvider es un control de WinForms. No hay equivalente en WPF. Pero aún podrá encontrar en Visual Studio 2008 si crea un proyecto de formularios de ganar.

Es posible que desee echar un vistazo a este artículo en Validación de errores en WPF. Tiene algunas sugerencias e ideas útiles sobre cómo manejar la validación.

Otros consejos

.NET 3.5 Se agregó soporte WPF para IdataErrorInfo: Validación de datos en .NET 3.5.

Primero disculpe por comentar una discusión tan antigua, pero esto podría ayudar ya que tenía exactamente la misma pregunta, y el enlace de Simon me ayudó a "comenzar con algo"

Podría probar el tutorial de Simon P.Stevens, pero honestamente no me gustó tanto:

  • El uso de ResponseTeMplate hace que la respuesta sea más lenta al mostrar el error.
  • Esto funciona solo si la regla es siempre la misma para una misma clase (en mi caso tengo algunas cantidades, que a veces puede ser negativa, a veces no).
  • En el caso de una aplicación internacionalizada (en mi caso), las bibliotecas externas no tienen acceso a los recursos dónde están las traducciones, por lo que no puedo establecer un mensaje apropiado.

Creo que usar MVVM está muy bien adaptado para administrar cualquier situación:

Configuré mi cuadro de texto, con un Borderbrush y ToolTip, con respecto a mis condiciones, ocultaré/mostraré la información sobre herramientas y el borde de color:

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}"/>

Código detrás (LostFocus = Leave para quien usó Windowsform):

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

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

Entonces 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");
                }
            }

Simplemente muy útiles cuando las reglas son específicas con respecto a la situación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top