在项目模板中实现Texbox的验证

时间:2017-09-01 13:03:29

标签: c# wpf xaml

我认为这是对数据模板的所有回合手动试验验证。

例如我有我的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来实现的原因。

1 个答案:

答案 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模板按预期显示。