强制验证; WPF,DataGrid,ObservableCollection

时间:2009-06-16 00:45:34

标签: wpf validation datagrid wpf-controls

我有一个WPF DataGrid。我读了一个csv文件并构建了一个ObservableCollection对象。 我将DataGrid.ItemsSource设置为Collection。我想在DataGrid中的每一行强制执行RowValidation。如果我,播放用户,编辑一个单元格,RowValidation会触发,一切都很好。但验证不会触发初始负载。有什么方法可以调用吗?ValidateRow ??在一排?在每一排? (C#,WPF,VS2008等)

2 个答案:

答案 0 :(得分:2)

对于绑定,将UpdateSourceTrigger设置为更改的属性,然后将验证规则放在其中。默认的更新源触发器是Lost Focus。

  <Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
            <Binding.ValidationRules>
                <ExceptionValidationRule />
            </Binding.ValidationRules>
        </Binding>

另外,对于另一个好的解决方案,请看这里

http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

Paul构建了一个自定义错误提供程序,如

                           

  

您可以调用Validate()方法   ErrorProvider强制验证,   并检查控件是否有效

答案 1 :(得分:1)

如果要在初始加载ObservableCollection后验证,则需要设置RowValidationRule并设置ValidationStep =“ConvertedProposedValue”

        <DataGrid Name="dgCsvObjects"
            ItemsSource="{Binding Path=CsvObjects}"
            AutoGenerateColumns="False">
            <DataGrid.RowValidationRules>
                <Validation:MyObjectValidationRule ValidationStep="ConvertedProposedValue" />
            </DataGrid.RowValidationRules>
            <DataGrid.Columns>
                <DataGridTextColumn Header="Property1" Binding="{Binding Path=Property1}"  />
                <DataGridTextColumn Header="Property2" Binding="{Binding Path=Property2}"  />
                <DataGridTextColumn Header="Property3" Binding="{Binding Path=Property3}"  />
                <DataGridTextColumn Header="Property4" Binding="{Binding Path=Property4}"  />
            </DataGrid.Columns>
        </DataGrid>