質問

ツールボックスの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");
                }
            }

状況に関してルールが具体的である場合、非常に便利です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top