Warum funktioniert WPF Style zum Anzeigen von Validierungsfehlern in ToolTip für eine TextBox, aber für eine ComboBox?

Ich bin mit einem typischen Stil für die Anzeige der Validierungsfehler als tooltip aus IErrorDataInfo für ein Textfeld wie unten gezeigt, und es funktioniert gut.

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

Aber wenn ich versuche, das gleiche zu tun, für eine ComboBox wie dies scheitert es

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

Den Fehler bekomme ich in der Ausgabe-Fenster:

System.Windows.Datenfehler: 17 : Cannot get 'Item[]' value ('ValidationError') von '(Validierung.Fehler)' (Typ 'ReadOnlyObservableCollection`1'). BindingExpression:Path=(0)[0].ErrorContent; DataItem='ComboBox' (Name='ownerComboBox'); target element is 'ComboBox' (Name='ownerComboBox'); target property is 'ToolTip' (Typ 'Object') ArgumentOutOfRangeException:'System.ArgumentOutOfRangeException: das Angegebene argument lag außerhalb des Bereichs Gültiger Werte.Parameter name: index"

Seltsam es auch versucht, ungültige Datenbank-änderungen, wenn ich das Fenster schließen wenn ich alle ComboBox-Werte (Dies gilt auch bei der verbindlichen Fehler Auftritt)!!!

Kann nicht eingefügt werden der Wert NULL in Spalte 'EmpFirstName' Tabelle 'OITaskManager.dbo.Mitarbeiter'; Spalte erlaubt keine null-Werte zulassen. INSERT schlägt fehl.
Die Anweisung wurde beendet.

Einfach kommentieren den Stil alles andere funktioniert perfekt. Wie kann ich dieses Problem beheben?

Nur für den Fall jemand braucht es eine der comboBox' xaml folgt:

<ComboBox ItemsSource="{Binding Path=Employees}" 
                  SelectedValuePath="EmpID"                       
                  SelectedValue="{Binding Path=SelectedIssue.Employee2.EmpID,
                     Mode=OneWay, ValidatesOnDataErrors=True}" 
                  ItemTemplate="{StaticResource LastNameFirstComboBoxTemplate}"
                  Height="28" Name="ownerComboBox" Width="120" Margin="2" 
                  SelectionChanged="ownerComboBox_SelectionChanged" />


<DataTemplate x:Key="LastNameFirstComboBoxTemplate">
    <TextBlock> 
         <TextBlock.Text> 
             <MultiBinding StringFormat="{}{1}, {0}" > 
                   <Binding Path="EmpFirstName" /> 
                   <Binding Path="EmpLastName" /> 
             </MultiBinding>
         </TextBlock.Text>
    </TextBlock>
</DataTemplate>

SelectionChanged: (ich planen, zu implementieren, der befiehlt vor dem langen, aber, wie dies ist mein erstes WPF-Projekt, an dem ich nicht Weg voller MVVM noch. Ich bin versucht, die Dinge in kleinen und mittleren beißt)

//This is done this way to maintain the DataContext Integrity 
//and avoid an error due to an Object being "Not New" in Linq-to-SQL
private void ownerComboBox_SelectionChanged(object sender, 
                                            SelectionChangedEventArgs e)
{
    Employee currentEmpl = ownerComboBox.SelectedItem as Employee;
    if (currentEmpl != null && 
        currentEmpl != statusBoardViewModel.SelectedIssue.Employee2)
    {
        statusBoardViewModel.SelectedIssue.Employee2 = currentEmpl;
    }
}
Kommentar zu dem Problem
Nun, es hat seit einer Woche keine Antworten auf eine Frage, die ich angenommen hatte, war etwas dumm von mir. Hat jemand einen Vorschlag, wo Sie der Forschung oder weitere Informationen für mich, um auf mein problem? Kommentarautor: Mike B

InformationsquelleAutor der Frage Mike B | 2010-02-14

Schreibe einen Kommentar