Tôi có một TextBox
được liên kết với thuộc tính của đối tượng thực hiện IDataErrorInfo
. Tôi thiết lập số Validation.ErrorTemplate
của số TextBox
và hoạt động tốt. Vấn đề là tôi có trên TabControl
và mẫu xác thực không hiển thị nữa nếu tôi thay đổi tab sang tab khác và sau đó quay lại tab ban đầu (trong đó TextBox
). Có vẻ như nó đã được xác nhận (như giá trị là chính xác), nhưng thực sự nó không phải là.Sự cố với xác thực WPF (IDataErrorInfo) và tab lấy nét
Đây là đối tượng IDataErrorInfo
- lưu ý rằng một giá trị "đúng" là một chuỗi với chiều dài 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;
}
}
}
và đây là 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>
Bất kỳ ý tưởng về những gì Tôi đang làm sai?
Đây cũng là một vấn đề với các nội dung của 'Expander', và cùng một giải pháp được áp dụng. –
Bài đăng blog có liên quan - [Lỗi xác thực WPF biến mất bên trong TabControl khi chuyển đổi tabItems] (http://karlshifflett.wordpress.com/2008/02/19/wpf-validation-errors-disappear-inside-tabcontrol-when-switching- tabitems /) – akjoshi
Không phải là giải pháp hoàn chỉnh. Xác thực ban đầu chỉ hoạt động đối với mục tab được chọn đầu tiên, phần còn lại của chúng sẽ không tự động xác thực khi bạn chuyển sang chúng. Tôi phát hiện ra rằng bằng cách đặt thủ công DataContext trong mã phía sau trong chúng tại OnLoad giải quyết vấn đề này là tốt nhưng nó xấu xí. Tôi vẫn đang tìm kiếm giải pháp ... – MoonStom