ツールボックスでWPFコンポーネントを調べていますが、2005/2008に存在するエラープロバイダーが見つかりません。
削除されていますか?
ErrorProviderはWinformsコントロールです。WPFには同等のものはありません。ただし、Winフォームプロジェクトを作成すると、VisualStudio2008で見つけることができます。
WPFでのエラー検証に関するこの記事を参照することをお勧めします。検証を処理する方法について、いくつかの有用な提案とアイデアがあります。
.NET 3.5は、IDataErrorInfoのWPFサポートを追加しました:.NET3.5でのデータ検証。
最初はそのような古い議論にコメントしてくれてすみませんが、まったく同じ質問があったのでこれは役立つかもしれません、そしてサイモンのリンクは私が「何かから始める」のを助けました
Simon P.Stevensチュートリアルをテストすることはできましたが、正直なところ、それほど好きではありませんでした。
MVVMの使用は、あらゆる状況を管理するのに非常に適していると思います。
条件に関して、BorderBrushとToolTipを使用してTextBoxを設定し、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}"/>
コードビハインド(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");
}
}
ルールが状況に関して特定である場合に非常に役立ちます。