2009-11-09 71 views

回答

7

ErrorProvider是一个Winforms控件。在WPF中没有等价物。但是如果你创建一个win表单项目,你仍然可以在visual studio 2008中找到。

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

0

首先请原谅我评论这样一个老的讨论,但是这可能会帮助,因为我有完全一样的问题,西蒙的链接帮助我“的东西开始”

我可以测试西蒙P.Stevens教程,但老实说我不喜欢那么多:

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

我认为使用MVVM是很好的适合于管理任何情况:

设置我的文本框,一个BorderBrush和工具提示,关于我的条件,我会隐藏/显示工具提示和彩色边框:

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

代码的背后(引发LostFocus =保留为谁用于WindowsForm):

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

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

然后视图模型:

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

时规则是关于具体的情况就非常有用。

相关问题