質問
ツールボックスのWPFコンポーネントを見ていますが、2005/2008年に存在するエラープロバイダーは見つかりません。
削除されましたか?
解決
errorprovider Winformsコントロールです。 WPFには同等のものはありません。ただし、Win Forms Projectを作成すると、Visual Studio 2008で見つけることができます。
この記事をご覧ください WPFでのエラー検証. 。検証を処理する方法について、いくつかの有用な提案とアイデアがあります。
他のヒント
.NET 3.5 IDATAERRORINFOのWPFサポートを追加: .NET 3.5のデータ検証.
まず、このような古い議論をコメントしてくれてすみませんが、これはまったく同じ質問があったので、サイモンのリンクが「何かから始める」のに役立ちました。
Simon P.Stevensのチュートリアルをテストできましたが、正直なところ、それほど気に入らなかったのです。
- ResponseTemplateを使用すると、エラーを表示すると応答が遅くなります。
- これは、ルールが同じクラスで常に同じである場合にのみ機能します(私の場合、ある程度の量があり、時には否定的ではない場合があります)。
- 国際化されたアプリケーション(私の場合)の場合、外部ライブラリには翻訳があるリソースにアクセスできないため、充当されたメッセージを設定することはできません。
MVVMを使用することは、あらゆる状況を管理するために非常に適していると思います。
私は自分の条件に関して、ボーダーブラシとツールチップを使用してテキストボックスを設定します。ツールチップと色の境界線を非表示/表示します。
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 = "";
}
}
次に、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");
}
}
状況に関してルールが具体的である場合、非常に便利です。
所属していません StackOverflow