强制验证;WPF、DataGrid、ObservableCollection

强制验证;WPF、DataGrid、ObservableCollection,wpf,validation,datagrid,wpf-controls,Wpf,Validation,Datagrid,Wpf Controls,我有一个WPF数据网格。我读取一个csv文件并构建一个对象的可观察集合。 我将DataGrid.ItemsSource设置为集合。然后,我想对DataGrid中的每一行强制进行行验证。如果我(扮演用户)编辑一个单元格,行验证将启动,一切正常。但验证不会在初始负载时启动。有什么方法可以叫我ValidateRow吗??一排?每一排? (C#、WPF、VS2008等)对于绑定,将UpdateSourceRigger设置为property changed,然后将验证规则放入其中。默认的更新源触发器失去焦

我有一个WPF数据网格。我读取一个csv文件并构建一个对象的可观察集合。 我将DataGrid.ItemsSource设置为集合。然后,我想对DataGrid中的每一行强制进行行验证。如果我(扮演用户)编辑一个单元格,行验证将启动,一切正常。但验证不会在初始负载时启动。有什么方法可以叫我ValidateRow吗??一排?每一排?
(C#、WPF、VS2008等)

对于绑定,将UpdateSourceRigger设置为property changed,然后将验证规则放入其中。默认的更新源触发器失去焦点

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

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

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

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


如果希望在初始加载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>

您可以尝试
row.BindingGroup.ValidateWithoutUpdate()