データの表示と編集にDataGridを使用しています。ビュー(datagrid)はビューモデルにバインドされています。いいえ、カスタムValidationRuleを追加しました(このチュートリアルに続いて:http://blogs.u2u.be/diederik/post/2009/09/30/Validation-in-a-WPF-DataGrid.aspx)
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>
間違った値を入力すると、セルに赤い境界線が表示され、行ヘッダーに赤い感嘆符(!)が表示されます。ただし、メッセージ付きのツールチップは表示されません。にカスタムスタイルを追加しようとしました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>
データグリッドのツールチップにエラーコンテンツを表示する方法についてのアイデアはありますか?何か重要なものが欠けていると思いますが、何が見つかりません...
実用的な解決策:
<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
。有益なコメントをありがとう。