Estoy usando un estilo típico para mostrar los errores de validación como información sobre herramientas de IErrorDataInfo para un cuadro de texto como se muestra a continuación y funciona bien.¿Por qué WPF Style muestra errores de validación en ToolTip para un TextBox pero falla para un ComboBox?
<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>
Pero cuando trato de hacer lo mismo para un cuadro combinado como esto falla
<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>
El error que consigo en la ventana de salida es:
System.Windows.Data Error: 17: No se puede obtener el valor 'Item []' (escriba 'ValidationError') desde '(Validation.Errors)' (escriba 'ReadOnlyObservableCollection`1'). BindingExpression: Path = (0) [0] .ErrorContent; DataItem = 'ComboBox' (Name = 'ownerComboBox'); el elemento objetivo es 'ComboBox' (Name = 'ownerComboBox'); objetivo es propiedad 'sobre herramientas' ArgumentOutOfRangeException (tipo 'Objeto'): 'System.ArgumentOutOfRangeException: especificado argumento estaba fuera de la gama de values.Parameter nombre válido: Índice'
Por extraño que también intenta realizar cambios de base de datos no válidos cuando Cierro la ventana si cambio cualquier valor de ComboBox (¡Esto también es cuando ocurre el error de enlace)!
No se puede insertar el valor NULL en la columna 'EmpFirstName', tabla 'OITaskManager.dbo.Employees'; la columna no permite nulos. INSERT falla La declaración ha finalizado.
Simplemente comentando el estilo, todo funciona perfectamente. ¿Cómo puedo solucionar esto?
Por si acaso alguien lo necesita uno de xaml el cuadro combinado' sigue:
<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: (Que hacer planes para poner en práctica al mando después de poco tiempo, pero como este es mi primer proyecto WPF no me he vuelto completa MVVM todavía. estoy tratando de tomar las cosas en las picaduras de tamaño pequeño o mediano)
// 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;
}
}
Bueno, ha sido una semana sin respuestas sobre una pregunta que había asumido que era algo tonto de mi parte. ¿Alguien tiene alguna sugerencia sobre dónde investigar o información adicional para que yo publique sobre mi problema? –