我认为这是对数据模板的所有回合手动试验验证。
例如我有我的checklistbox(它来自Xceed wpf扩展工具包,但它没关系。为了示例,它可以是一个简单的列表框):
<xctk:CheckListBox Name="myCheckListBox" ItemsSource="{Binding Fields}" SelectedValue="{Binding SelectedValue}" Margin="10,10,10,72">
<xctk:CheckListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Width="250" Text="{Binding Field.Symbol}"/>
<Label Content="Value:" Visibility="{Binding SelectedValueVisibility}"/>
<TextBox Name="myTextBox" Width="100" Visibility="{Binding SelectedValueAppVisibility}"
Validation.ErrorTemplate="{StaticResource validationErrorTemplate}" >
<TextBox.Text>
<Binding Path="TextValue" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<my:EmptyTextValidator></my:EmptyTextValidator>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
</DataTemplate>
</xctk:CheckListBox.ItemTemplate>
</xctk:CheckListBox>
我的EmptyTextValidator类与以下类似: https://docs.microsoft.com/en-us/dotnet/framework/wpf/data/how-to-implement-binding-validation
澄清:&#34;价值:{TextBox}&#34;仅在选中项目时出现。 问题就像它是一个简单的列表框一样,所有文本框从一开始就可见。
需要什么: 在Button_click上显示验证错误。
问题: 验证仅在您输入内容后才有效。 当用户加载我的控件并立即点击&#34;确定&#34;时,不会显示验证错误。
要手动触发验证,我需要一个&#34;静态&#34;文本框:
textBox1.GetBindingExpression(TextBox.TextProperty).UpdateSource();
我无法在模板中使用texbox。 这也是我无法通过例如IDataErrorInfo来实现的原因。
答案 0 :(得分:1)
您可以在定义INotifyDataErrorInfo
属性的类中实现TextValue
接口,并在需要使ErrorsChanged
无效时引发TextBox
事件。有关示例实现,请参阅以下TechNet文章:https://social.technet.microsoft.com/wiki/contents/articles/19490.wpf-4-5-validating-data-in-using-the-inotifydataerrorinfo-interface.aspx。
因此,在Button
点击事件处理程序或命令中,您可以遍历Fields
集合中的项目,并调用执行验证的每个对象的方法或某些内容。提出ErrorsChanged
。这会导致Validation.Error
中无效TextBox
元素的ListView
模板按预期显示。