2014-12-31 17 views
2

我有一個自定義驗證一個WPF數據網格來驗證E-Mail地址的進入火災。驗證在用戶編輯單元格的文本以及按照預期觸發我的自定義驗證時起作用。無法獲得WPF的驗證,當用戶添加新行

然而,當用戶通過點擊通過CanUserAddRows屬性提供的空單元格添加一個新行,驗證不」火。在後面我的代碼,我有我的自定義的驗證,這都將根據是否有任何錯誤,在一個保存buttons'enabled狀態的處理程序。

我怎樣才能得到驗證射擊在一個新行插入?

<DataGrid AutoGenerateColumns="False" Margin="0,1,2,-1" ItemsSource="{Binding EmailRecipients}" CanUserReorderColumns="False" CanUserAddRows="True" Name="emailAddressBindingGrid"> 
    <DataGrid.Resources> 
     <Style x:Key="DataGridCellErrorStyle" TargetType="{x:Type TextBox}"> 
      <Style.Triggers> 
       <Trigger Property="Validation.HasError" Value="True"> 
        <Setter Property="ToolTip" 
         Value="{Binding RelativeSource={RelativeSource Self}, 
         Path=(Validation.Errors)[0].ErrorContent}"/> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Email Address" Width="400" x:Name="emailAddressColumn" EditingElementStyle="{StaticResource DataGridCellErrorStyle}"> 
      <DataGridTextColumn.Binding> 
       <Binding Path="ToAddress" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" NotifyOnValidationError="True" x:Name="emailAddressBinding"> 
        <Binding.ValidationRules> 
         <Validators:EmailAddressValidator ErrorMessage="A valid email address is required." /> 
        </Binding.ValidationRules> 
       </Binding> 
      </DataGridTextColumn.Binding> 
     </DataGridTextColumn> 
     // other columns 
    </DataGrid.Columns> 
</DataGrid> 

回答

3

對於您可能有添加新行時處理DataGridView.RowValidating Event WinForms應用程序。從MSDN

描述:

此事件是類似於Control.Validating事件。使用此事件對行的所有值執行驗證。如果該行未通過驗證,請將CancelEventArgs.Cancel屬性設置爲true。取消此事件防止RowValidated,Control.Validating和Control.Validated事件的發生,並且還防止用戶離開無效行,並防止排被保存到外部數據源中的綁定模式數據。

WPF你可以嘗試使用DataGrid.RowValidationRules Property

說明從MSDN:

DataGrid控件使您能夠在細胞和行級都執行驗證。通過單元級驗證,您可以在用戶更新值時驗證綁定數據對象的各個屬性。通過行級驗證,您可以在用戶提交行更改時驗證整個數據對象。要創建自定義驗證規則,請創建一個從ValidationRule類派生並實現Validate方法的類。將自定義驗證規則添加到RowValidationRules集合。

+1

除了引用之外,還包括原始網站的鏈接,以便能夠找到更多詳細信息。我編輯了你的答案。 – t3chb0t

+0

DataGridView是WinForms。我不知道是什麼事件這對應於WPF的DataGrid –

+0

感謝t3chb0t。我已經接受你的編輯。 – RamyaN