【发布时间】:2013-11-27 11:49:41
【问题描述】:
我正在使用 IDataError 来验证我的控件和文本框中的对象属性。 在我的课堂上,我添加了一些验证,然后将绑定添加到文本框控件。
这是我的课:
public class Customer : IDataErrorInfo
{
public string FirstName { get; set; }
public string LastName { get; set; }
public long TributaryCode { get; set; }
#region IDataErrorInfo Members
public string Error
{
get { throw new NotImplementedException(); }
}
public string this[string columnName]
{
get
{
string result = null;
if (columnName == "FirstName")
{
if (string.IsNullOrEmpty(FirstName))
result = "Please enter a First Name";
}
if (columnName == "LastName")
{
if (string.IsNullOrEmpty(LastName))
result = "Please enter a Last Name";
}
return result;
}
}
#endregion
}
我遇到的问题是,当 TributaryCode 为空时,我收到一个异常,指出它无法转换值 ''。这显然是抛出的,因为 tributarycode 很长并且不支持空值。 此外,当加载包含文本框的 UserControl 时,该值显示为 0。我想要的是从空开始,当文本框为空时,不抛出该异常。
那么,我需要做什么?我是否必须将所有属性都写为可为空的?然后这些类转换为 WCF 服务的请求类,所以这是一个可能的解决方案,但我想问一下这是否正确。
另外,正如我所说,所有这些控件都在 UserControl 中。我有一个窗口,其中包含一个包含此 UserControl 的 ScrollViewer。 验证是在文本框的 LostFocus 事件中完成的,但由于某种原因,当窗口加载并加载 UserControl 时,我所有的空文本框都已经有红色边框,表明它没有通过验证。 为什么会发生这种情况?我想这一定与 UserControl 项有关。
这是我的 XAML 文本框之一:
<TextBox x:Name="tbFirstName" Grid.Row="0" Grid.Column="1"
Text="{Binding UpdateSourceTrigger=LostFocus, Path=FirstName,
ValidatesOnDataErrors=true, NotifyOnValidationError=true}" />
谢谢!
【问题讨论】:
标签: c# wpf data-binding idataerrorinfo