Ich habe eine TextBox
gebunden an eine Eigenschaft eines Objekts, das IDataErrorInfo
implementiert. Ich habe die Validation.ErrorTemplate
der TextBox
eingerichtet, und es funktioniert gut. Das Problem ist, dass ich diese auf einem TabControl
habe, und die Validierungsvorlage zeigt nicht mehr an, wenn ich die Registerkarte zu einer anderen ändere und dann auf die anfängliche Registerkarte zurückkomme (wo die TextBox
ist). Es sieht so aus, als wäre es validiert (wie der Wert ist korrekt), aber eigentlich ist es nicht.Problem mit WPF-Validierung (IDataErrorInfo) und Registerkarte Fokussierung
Dies ist IDataErrorInfo
Objekt - beachten Sie, dass ein "richtiger" Wert ein String mit einer Länge von 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;
}
}
}
und das ist das 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>
Alle Ideen, was Ich mache falsch?
Dies ist auch ein Problem mit dem Inhalt des 'Expander', und die gleiche Lösung gilt. –
Ein verwandter Blogpost - [WPF-Validierungsfehler verschwinden beim Wechseln von TabItems in TabControl] (http://karlshifflett.wordpress.com/2008/02/19/wpf-validation-errors-disappear-inside-tabcontrol-when- switching- tabitems /) – akjoshi
Keine vollständige Lösung. Die anfängliche Validierung funktioniert nur für den ersten ausgewählten Tab-Eintrag, der Rest wird nicht automatisch validiert, wenn Sie später zu ihnen wechseln. Ich habe herausgefunden, dass das manuelle Setzen des DataContext in Code auf OnLoad dieses Problem ebenfalls löst, aber es ist hässlich. Ich suche immer noch nach einer Lösung ... – MoonStom