2012-09-27 141 views
2

我正在使用DataGrid顯示和編輯數據。視圖(datagrid)綁定到視圖模型。不,我添加了一個自定義的有效性規則(以下這個教程:http://blogs.u2u.be/diederik/post/2009/09/30/Validation-in-a-WPF-DataGrid.aspx在工具提示中顯示DataGrid-ValidtionError

namespace Presentation.ViewsRoot.ValidationRules 
{ 
    class IsPositiveIntegerRule : ValidationRule 
    { 
     public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
     { 
      if (string.IsNullOrEmpty(value as string)) 
      { 
       return new ValidationResult(true, null); 
      } 
      else 
      { 
       int proposedValue; 

       if (!int.TryParse(value.ToString(), out proposedValue)) 
       { 
        return new ValidationResult(false, "'" + value.ToString() + "' ist no positive integer (>=0)."); 
       } 

       if (proposedValue < 0) 
       { 
        // Something was wrong. 
        return new ValidationResult(false, "Value can't be smaller than 0."); 
       } 
      } 

      // Everything OK. 
      return new ValidationResult(true, null); 
     } 
    } 
} 

我在XAML綁定到這個有效性規則

<DataGridTextColumn Header="Shitfs" IsReadOnly="False"> 
    <DataGridTextColumn.Binding> 
     <Binding Path="Shifts"> 
      <Binding.ValidationRules> 
      <validationRules:IsPositiveIntegerRule /> 
      </Binding.ValidationRules> 
     </Binding> 
    </DataGridTextColumn.Binding> 
</DataGridTextColumn> 

輸入錯誤的值時,細胞也出現一個紅色邊框和的rowHeader顯示紅色感嘆號(!)。但是沒有顯示消息的工具提示。我試着在UserControl.Resources添加自定義風格,但它沒有工作:

<Style TargetType="TextBlock"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="ToolTip" 
       Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
        Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

上如何顯示errorcontent在數據網格工具提示任何想法?我想我失去了一些東西必不可少的,但我不能找到什麼...

工作液:

<Style x:Key="CellEditStyle" TargetType="TextBox"> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="ToolTip" 
        Value="{Binding RelativeSource={RelativeSource Self}, 
        Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

結合的評論有關使用{Binding RelativeSource Self},並引用它的名字的作品。我也必須將TargetType從TextBlock更改爲TextBox。感謝您的有用評論。

+1

在我的情況做了與的RelativeSource = {自我的RelativeSource} –

+0

@FlorianGl工作:改到'' - > no tooltip :( – basti

+1

Try

回答

0

嘗試

<Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/>