Pergunta

Estou olhando para os componentes do WPF na caixa de ferramentas, mas não consigo encontrar o provedor de erros presente em 2005/2008.

É removido?

Foi útil?

Solução

a ErrorProvider é um controle Winforms. Não há equivalente no WPF. Mas você ainda poderá encontrar no Visual Studio 2008 se criar um projeto de formas de vitória.

Você pode querer dar uma olhada neste artigo sobre Validação de erro no WPF. Tem algumas sugestões e idéias úteis sobre como lidar com a validação.

Outras dicas

.NET 3.5 Adicionado suporte WPF ao idataerrorinfo: Validação de dados no .NET 3.5.

Primeiro, desculpe -me por comentar uma discussão tão antiga, mas isso poderia ajudar como eu tinha exatamente a mesma pergunta, e o link de Simon me ajudou a "começar com alguma coisa"

Eu poderia testar o tutorial de Simon P.stevens, mas honestamente não gostei tanto:

  • O uso do ResponseTemplate torna a resposta mais lenta ao exibir o erro.
  • Isso funciona apenas se a regra for sempre a mesma para uma mesma classe (no meu caso, tenho algumas quantidades, que às vezes podem ser negativas, às vezes não).
  • No caso de um aplicativo internacionalizado (no meu caso), as bibliotecas externas não têm acesso a recursos onde estão as traduções, para que não possa definir uma mensagem apropriada.

Eu acho que o uso do MVVM está muito bem adaptado para gerenciar qualquer situação:

Defino minha caixa de texto, com uma borderbrush e uma dica de ferramenta, sobre minhas condições, ocultarei/exibirei a dica de ferramenta e a borda colorida:

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 para trás (LostFocus = licença para quem costumava WindowsForm):

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

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

Então 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");
                }
            }

Apenas muito útil quando as regras são específicas sobre a situação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top