Ho un TextBox
associato a una proprietà di un oggetto che implementa IDataErrorInfo
. Ho impostato il TextBox
e funziona correttamente. Il problema è che li ho su TabControl
e il modello di validazione non viene più visualizzato se cambio la scheda in un'altra e poi torno alla scheda iniziale (dove è TextBox
). Sembra che sia convalidato (come il valore è corretto), ma in realtà non lo è.Problema con convalida WPF (IDataErrorInfo) e tabulazione
questo è l'oggetto IDataErrorInfo
- di notare che un valore "corretto" è una stringa con una lunghezza di 2:
public class Presenter : IDataErrorInfo
{
public Presenter()
{
this.Property = String.Empty;
}
public string Property { get; set; }
public string Error { get { return null; } }
public string this[string columnName]
{
get
{
if (columnName == "Property")
{
if (this.Property.Length == 2)
return null;
else
return "Invalid property length!";
}
else return null;
}
}
}
e questo è il XAML:
<TabControl >
<TabItem Header="tabItem1" Name="tabItem1" GotFocus="tabItem1_GotFocus">
<Grid>
<TextBox Width="100" Height="20" x:Name="txtField">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="16"/>
</Grid.ColumnDefinitions>
<AdornedElementPlaceholder Grid.Column="0"/>
<Image Source="bullets16.png" Grid.Column="1" ToolTip="{Binding CurrentItem.ErrorContent, Mode=OneWay}">
</Image>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</TextBox.Style>
<TextBox.Text>
<Binding Path="Property" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True">
</Binding>
</TextBox.Text>
</TextBox>
</Grid>
</TabItem>
<TabItem Header="tabItem2" Name="tabItem2" >
<Grid />
</TabItem>
</TabControl>
Tutte le idee su ciò che Sto sbagliando?
Questo è anche un problema con il contenuto di 'Expander', e si applica la stessa soluzione. –
Un post sul blog correlato - [Errori di convalida WPF scompaiono all'interno di TabControl quando si passa a TabItems] (http://karlshifflett.wordpress.com/2008/02/19/wpf-validation-errors-disappear-inside-tabcontrol-when-switching- tabitems /) – akjoshi
Non è una soluzione completa. La validazione iniziale funziona solo per il primo elemento della scheda selezionato, il resto non si convalida automaticamente quando in seguito si passa a essi. Ho scoperto che impostando manualmente il codice DataContext dietro a loro su OnLoad risolve anche questo problema, ma è brutto. Sto ancora cercando una soluzione ... – MoonStom