【发布时间】:2012-08-23 08:11:47
【问题描述】:
我是 WPF 新手,有一个(在我看来)奇怪的问题: 我想将本地属性(名称:XmlText)绑定到 TextBox.Text 属性并使用如下验证规则验证值:
<TextBox Height="23" Width="301" Margin="78,14,0,0" Name="tbXMLFile" HorizontalAlignment="Left" VerticalAlignment="Top" TextChanged="tbXMLFile_TextChanged">
<TextBox.Style>
<Style TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors),
Converter={StaticResource ErrorsToStringConverter}}"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
<TextBox.Text>
<Binding Path="XmlText" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:RegexValidationRule Dateiendung="xml"></local:RegexValidationRule>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
每当我的属性 XmlText 获得一个新值时,验证不会做任何事情,但如果我在我的 TextBox 中手动输入文本,它就会验证。
如果我删除 TextChanged-Event 或将以下代码添加到事件中,验证将不再起作用:
XmlText = ((TextBox)sender).Text;
有人可以解释为什么程序会这样吗?
【问题讨论】:
-
您是否为您设置为 DataContext 的对象类实现了 INotifyPropertyChanged?在您的属性 XmlText 中,您应该在值更改时引发 PropertyChanged 事件...
标签: c# wpf validation binding