WPF中的错误提供程序

时间:2009-11-09 13:59:19

标签: wpf errorprovider

我正在查看工具箱中的WPF组件,但我找不到2005/2008年出现的错误提供程序。

它被删除了吗?

3 个答案:

答案 0 :(得分:8)

ErrorProvider是一个Winforms控件。 WPF中没有相应的内容。但是如果你创建一个win form项目,你仍然可以在visual studio 2008中找到它。

您可能希望在error validation in WPF上查看这篇文章。它为如何处理验证提供了一些有用的建议和想法。

答案 1 :(得分:4)

.NET 3.5为IDataErrorInfo添加了WPF支持:Data validation in .NET 3.5

答案 2 :(得分:0)

首先请原谅我对这样一个古老的讨论发表评论,但这可能会有所帮助,因为我有完全相同的问题,而Simon的链接帮助我“开始了某些事情”

我可以测试Simon P.Stevens教程,但说实话,我并不喜欢它:

  • 使用responseTemplate会在显示错误时使响应变慢。
  • 只有当同一个规则的规则总是相同时才会起作用(在我的情况下,我有一些数量,有时可能是负数,有时则不是)。
  • 对于国际化应用程序(在我的情况下),外部库无权访问翻译的资源,因此我无法设置适当的消息。

我认为使用MVVM非常适合管理任何情况:

我设置我的TextBox,使用BorderBrush和ToolTip,关于我的条件我将隐藏/显示工具提示和颜色边框:

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

Code Behind(LostFocus =为WindowsForm使用的离开):

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

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

然后是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");
                }
            }

当规则具体针对具体情况时,这非常有用。