表示不在数据结合控件的控件中的验证错误?
-
28-09-2019 - |
题
我有一个 TextBlock
在 DockPanel
在 Border
. 。这 TextBlock
是数据结合的,可以使用屏幕键盘更改。因此,我已经将其连接到验证中,并且可以很好地工作。我的困境是,我似乎只能改变 TextBlock
有验证错误时的样式。我想触发 Border
的风格。我怎样才能做到这一点?
还有一种方法可以绑定 ErrorContents
视野的其他地方?
解决方案
只需从其他控件中绑定到您的文本框即可。在下面,我将标签的内容属性绑定到文本框的(验证。
<DockPanel>
<!-- TextBox bound to a data object-->
<TextBox Name="textBox1" DockPanel.Dock="Top" Text="{Binding Path=Age, ValidatesOnExceptions=True, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}"></TextBox>
<!-- A label that displays the errors from textBox1 -->
<Label Content="{Binding ElementName=textBox1, Path=(Validation.Errors)[0].ErrorContent}"></Label>
</DockPanel>
其他提示
我认为这将解决您的问题:
XAML:
<Window x:Class="WpfErrorsBorderColor.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:WpfErrorsBorderColor="clr-namespace:WpfErrorsBorderColor" Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style x:Key="{x:Type WpfErrorsBorderColor:MyControl}" TargetType="{x:Type WpfErrorsBorderColor:MyControl}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="WpfErrorsBorderColor:MyControl" >
<Border Name="bd" >
<DockPanel LastChildFill="True" >
<TextBox Text="{Binding Path=Description,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" DockPanel.Dock="Top"/>
<TextBlock Name="textBlock" Text="{Binding Path=Description,ValidatesOnDataErrors=True,NotifyOnValidationError=True}"></TextBlock>
</DockPanel>
</Border>
<ControlTemplate.Triggers>
<Trigger SourceName="textBlock" Property="Validation.HasError" Value="True">
<Setter TargetName="bd" Property="BorderBrush" Value="Red" />
<Setter TargetName="bd" Property="BorderThickness" Value="4" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Window.Resources>
<WpfErrorsBorderColor:MyControl></WpfErrorsBorderColor:MyControl>
代码:
using System;
using System.Windows;
using System.Windows.Controls;
using System.ComponentModel;
namespace WpfErrorsBorderColor
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Data data = new Data() { Description = "123" };
DataContext = data;
}
}
public class Data : IDataErrorInfo, INotifyPropertyChanged
{
private string description;
public string Description
{
get { return description; }
set
{
if (description != value)
{
description = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Description"));
}
}
}
string CheckLenght(string str)
{
return (str.Length < 1 || str.Length > 10) ? "Strign must be between 1 and 10 letters" : String.Empty;
}
public string Error
{
get { return CheckLenght(Description); }
}
public string this[string columnName]
{
get { return CheckLenght(Description); }
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
public class MyControl:UserControl
{
public MyControl()
{
}
}
}
错误查看 您可以以相同的方式绑定;)
不隶属于 StackOverflow