2011-07-11 20 views
-1

に従っていないようだ、その条件の一つがトリガー外MultiTriggerは、私がmultitriggerを持っている条件に

<Condition Property="Validation.HasError" 
    Value="True"/> 

ですが、私はnullにエラーテンプレートを設定し、そして唯一のトリガーのセッターのいずれかで行うI

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

を持っている。しかし、時には、私はまだインデックスが範囲外であることを例外を取得何らかの理由で、私は空のエラーコレクションの要素0にアクセスしようとしていることすなわち。

これは、バッキングデータを使って何かをしようとするコントロールで発生するようですが、何もエラーがなくてもツールチップを作成しようとしている原因はわかりません。

編集:できるだけ多くのものを削除しました。以下は残っているものです。例外は、データバインドされたテキストボックスに何かを入力してフォーカスを切り替えるときに発生します。アプリケーションリソースMainWindow.xaml.csで

 <Style TargetType="{x:Type TextBox}"> 
     <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> 

(これは始動ウィンドウである)MainWindow.xamlで

public MainWindow() 
{ 
    InitializeComponent(); 
    this.DataContext = new Bar(); 
} 

、関連する結合

下App.xamlで

 <TextBox Text="{Binding Foo, ValidatesOnDataErrors=True}"/> 

バー内。

public sealed class Bar : IDataErrorInfo, INotifyPropertyChanged 
{ 
// Standard PropertyChanged, OnPropertyChanged removed 

// Foo does have a backing field and notifies in the 
// setter but those have been removed for brevity 
public string Foo {get;set;} 

public string Error 
{ 
    get { return ""; } 
} 

public string this[string columnName] 
{ 
    get 
    { 
     switch (columnName) 
     { 
      case "Foo": 
       if (string.IsNullOrEmpty(Foo)) 
        return "The foo must not be empty."; 

       return ""; 

      default: 
       throw new ArgumentException("columnName"); 
     } 
    } 
} 
} 
+0

問題を示す関連するコードを投稿すると、質問に役立つ場合があります。 –

+0

うーん、私はやったと思ったが、何とかそれは消えてしまったようだ。私は再びそれを持っている明日を追加します – Jamie

+0

XMLとHTMLの場合は、適切なコードの書式設定を使用する必要があります。それを私が直した。 –

答えて

1

"パス=(Validation.Errors)[0] .ErrorContent" 使用」:

<Setter Property="ToolTip" 
     Value="{Binding RelativeSource={RelativeSource Self}, 
     Path=(Validation.Errors), 
     Converter={StaticResource ValidationErrorConverter}}"/> 

あなたのコンバータは、次のようになります。XAMLにコンバータを追加しますPath =(Validation.Errors).CurrentItem.ErrorContent "を返します。エラーがある場合は、エラーコレクションがnullまたは空であるかどうかは考えられませんが、動作していることを考慮して、これがなぜそれを防止するのかはわかりません。

0

エラーコレクションはnullになることがあります。

代わりの
public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
{ 
    ReadOnlyObservableCollection<ValidationError> errors = value as ReadOnlyObservableCollection<ValidationError>; 

    if (errors == null) 
    { 
     return String.Empty; 
    } 

    return errors.Count > 0 ? errors[0].ErrorContent : String.Empty; 
} 
+0

最初にValidation.HasErrorをチェックしているので、なぜそれがToolTip設定ツールに到達するのかはわかりません。 – Jamie