2009-06-16 44 views
7

私はWPF DataGridを持っています。私はcsvファイルを読んでオブジェクトのObservableCollectionをビルドします。 DataGrid.ItemsSourceをコレクションに設定しました。私はその後、DataGridのすべての行にRowValidationを強制したいと思います。私が、ユーザーを演奏し、セルを編集すると、RowValidationが発生し、すべてがうまくいきます。しかし、検証は最初の負荷では発生しません。私が呼び出すことができるいくつかの方法はありますか?ValidateRow ??一列に?すべての行に? (C#、WPF、VS2008など)強制検証; WPF、DataGrid、ObservableCollection

答えて

2

バインディングでは、UpdateSourceTriggerをプロパティに変更して、その内部に検証ルールを設定します。デフォルトの更新元トリガーはLost Focusです。

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

はまた、別の良い解決策のために、ここで

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

顔をしているポールは

のように、カスタムエラープロバイダを構築します

あなたが 、検証を強制的にコントロールをしたい場合は、セットアップにRowValidationRuleを必要とValidationStep =「ConvertedProposedValue」を設定します

1

有効であるかどうかをチェックするために ErrorProvider上のvalidate()メソッドを呼び出すことができますObservableCollectionの最初の読み込み後に検証します。

 <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> 
関連する問題