我想在WPF上有TextBox
验证。我正在使用Binding
来验证它:
<TextBox Text="{Binding Path=Name, UpdateSourceTrigger=Explicit}" TabIndex="0" LostFocus="TextBox_OnLostFocus">
</TextBox>
LostFocus
事件:
private void TextBox_OnLostFocus(object sender, RoutedEventArgs e)
{
((Control) sender).GetBindingExpression(TextBox.TextProperty);
}
验证背后的代码:
public string Name
{
get { return _name; }
set
{
_name = value;
this.OnPropertyChanged(new PropertyChangedEventArgs("Name"));
}
}
public string Error { get { return this[null]; } }
public string this[string columnName]
{
get
{
string result = string.Empty;
columnName = columnName ?? string.Empty;
if (columnName == string.Empty || columnName == "Name")
{
if (string.IsNullOrEmpty(this.Name))
{
result += Properties.Resources.ValidationName + Environment.NewLine;
}
}
return result.TrimEnd();
}
}
我有一些问题:
1。当我第一次加载我的窗口时,我的控件被一个红色正方形(验证一个)所包围,但我希望它只在我发射它时出现(在{{1 })。)。
2. 我怎么知道我的所有字段是否都已经过验证?我的意思是,当我按下按钮时,只需知道如何知道所有控件是否已经过验证。
注意:我在构造函数中确实有这个上下文:
Explicit
答案 0 :(得分:1)
答案 1 :(得分:0)
实际上,我的问题与我用来验证的类有关。该课程这样做:
public ErrorProvider()
{
this.DataContextChanged += new DependencyPropertyChangedEventHandler(ErrorProvider_DataContextChanged);
this.Loaded += new RoutedEventHandler(ErrorProvider_Loaded);
}
因此,无论何时首次加载,它都会对Load
事件产生疑问,然后启动此事件:
private void ErrorProvider_Loaded(object sender, RoutedEventArgs e)
{
Validate();
}
所以我对它进行了评论,并在需要时启动了Validate()
方法....