7

私はWPF DataGridを持っています。csv ファイルを読み取り、オブジェクトの ObservableCollection を構築します。コレクションに DataGrid.ItemsSource を設定します。次に、DataGrid のすべての行で RowValidation を強制したいと思います。プレイしているユーザーがセルを編集すると、RowValidation が起動し、すべて問題ありません。ただし、検証は初期ロードでは起動しません。??ValidateRow?? を呼び出す方法はありますか? 一列に?すべての行で?(C#、WPF、VS2008 など)

4

2 に答える 2

2

バインディングの場合、UpdateSourceTrigger をプロパティ changed に設定し、検証ルールをその中に入れます。デフォルトの更新元トリガーは Lost Focus です。

  <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 に答える