我是WPF和C#的新手,我的应用程序出现问题。我有一个文本框,我想有一个ValidationRule来验证文本。现在我想在TextBox中有一个默认值,但我无法弄清楚如何去做。我尝试了很多方法,并且在Google上搜索问题时发现的提示似乎根本不起作用。C#WPF绑定,验证规则和默认值
也有没有办法做到这一点,而不使用ProjectData类文件?对我来说,似乎很难做出只有一个价值的课程才能实现验证。
我的有效性规则是这样的:
public class OpcValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string source = (string)value;
if(!source.StartsWith("Test"))
{
return new ValidationResult(false, msg);
}
// Valid!!!!
return new ValidationResult(true, null);
}
}
我的文本框看起来是这样的:
<TextBox x:Name="OPCAddressBox" Style="{StaticResource textBoxInError}" HorizontalAlignment="Right" TextWrapping="NoWrap" VerticalAlignment="Top" Margin="0,10,8,0" Width="150">
<TextBox.Text>
<Binding Path="OpcServerAddress" Source="{StaticResource pdd}" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:OpcValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
我的资源是这样的:
<Window.Resources>
<local:ProjectData Height="1000" Width="1000" OpcServerAddress="opc.tcp://address:port" x:Key="pdd"/>
<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip" Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
我ProjectData的文件是这样的:
public class ProjectData
{
private string opcServerAddress;
public string OpcServerAddress
{
get { return opcServerAddress; }
set { opcServerAddress = value; }
}
public ProjectData()
{
}
}
感谢那个链接大马士革,它帮助我了解更多的WPF验证。但是,我没有找到任何解决方案,但我的原始问题,在文本框中有一个默认值。 – chiefi 2011-03-25 10:35:48
哦对不起,我没有看到这个问题...只是编辑我的消息,一些有用的建议:) – Damascus 2011-03-25 11:15:14
非常感谢,现在就开始工作。你的文章真的帮了我。 – chiefi 2011-03-26 10:26:47