Sto utilizzando uno stile tipico per visualizzare gli errori di convalida come suggerimento da IErrorDataInfo per una casella di testo come mostrato di seguito e funziona correttamente.Perché WPF Style mostra errori di convalida in ToolTip per un TextBox ma non riesce per 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>
Ma quando provo a fare la stessa cosa per un ComboBox come questo non riesce
<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>
L'errore che ottengo nella finestra di output è:
System.Windows.Data Errore: 17: impossibile ottenere il valore 'Articolo []' (digitare 'ValidationError') da '(Validation.Errors)' (digitare 'ReadOnlyObservableCollection`1'). BindingExpression: Path = (0) [0] .ErrorContent; DataItem = 'ComboBox' (Name = 'ownerComboBox'); l'elemento di destinazione è 'ComboBox' (Name = 'ownerComboBox'); indirizzare proprietà è 'ToolTip' (tipo 'Oggetto') ArgumentOutOfRangeException: 'System.ArgumentOutOfRangeException: specificato l'argomento era fuori del campo di nome valido values.Parameter: indice'
Stranamente tenta anche di apportare modifiche di database non valido quando Chiudo la finestra se cambio qualche valore di ComboBox (Questo è anche quando si verifica l'errore di associazione) !!!
Impossibile inserire il valore NULL nella colonna "EmpFirstName", tabella "OITaskManager.dbo.Employees"; la colonna non consente null. INSERT fallisce. La dichiarazione è stata chiusa.
Semplicemente commentando lo stile in modo perfetto. Come posso risolvere questo?
Solo nel caso qualcuno ha bisogno di uno dei XAML del comboBox' segue:
<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: (Ho intenzione di implementare comandare in breve tempo, ma, in quanto questo è il mio primo progetto WPF io non sono andato pieno MVVM ancora. sto cercando di prendere le cose in morsi di piccole-medie dimensioni)
// 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;
}
}
Beh, è stata una settimana senza risposte su una domanda che avevo assunto era qualcosa di stupido da parte mia. Qualcuno ha un suggerimento su dove cercare o per ulteriori informazioni da pubblicare sul mio problema? –