7

我有一个 WPF 数据网格。我读取了一个 csv 文件并构建了一个 ObservableCollection 对象。我将 DataGrid.ItemsSource 设置为 Collection。然后,我想对 DataGrid 中的每一行强制执行 RowValidation。如果我,扮演用户,编辑一个单元格,RowValidation 触发,一切都很好。但是验证不会在初始加载时触发。有什么方法可以调用 ??ValidateRow?? 连续?在每一行?(C#、WPF、VS2008 等)

4

2 回答 2

2

对于您的绑定,将 UpdateSourceTrigger 设置为属性已更改,然后将您的验证规则放入其中。默认更新源触发器是失去焦点。

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

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

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

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

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

于 2009-06-16T12:17:29.407 回答
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>
于 2011-12-16T18:25:09.227 回答