我試圖驗證由DataView
(例如myDataGrid.ItemsSource = myDataView
)填充的DataGrid
上的輸入。但是,我所見過的所有WPF DataGrid驗證示例都假設DataGrid
源是C#類。我無法弄清楚如何將單個單元格(即列)連接到代碼隱藏驗證。有人可以舉個例子,或者指給我一個例子嗎?當綁定到DataView時WPF DataGrid驗證
回答
所以我做了一些更多的研究,而我基本上缺少的是我可以指定屬性的屬性的列名(或者甚至使用括號中的列序號,,例如Path="[0]"
)。在實現後,所有內容基本上與使用類屬性相同。因此,我使用的典型DataGrid
列定義如下:
<DataGridTextColumn Header="Regular" EditingElementStyle="{StaticResource ValidationErrorStyleBoxRA}" ElementStyle="{StaticResource ValidationErrorStyleBlockRA}" Width="60">
<DataGridTextColumn.Binding>
<Binding Path="HourlyRate" StringFormat="F3" ValidatesOnExceptions="True" ValidatesOnDataErrors="True" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:HourlyRatesAmountValidate ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
好的,我做了一些快速測試;我認爲真正做到這一點的主要障礙是DataGridCell在直接分配DataView進行顯示時不會爲其內容創建任何綁定。但是,如果您願意在創建DataGrid時跳過分配自定義DataGridTemplateColumn
的環節,則可以訪問模板內的TextBox實例上的綁定,並在其上設置自定義驗證錯誤。
實際上,無論是這個還是覆蓋由DataGrid生成的文本框的默認樣式;您會發現,默認的文本框樣式沒有任何邊框或任何東西,因此在其上設置驗證錯誤沒有任何效果。使用DataTemplate將其變爲一個正常的文本框或覆蓋其樣式將使您能夠實際上使某些內容可見,作爲設置驗證錯誤的效果。
然而,你需要自己做一些研究;我做了一個快速的原型,並且工作正常,但是我無法在DataTemplate中正確創建綁定(或者忘記了我上次使用它之後所知道的所有WPF,或者我只知道如何使用適當的綁定:)) 。如果你在某個地方看到它會更容易:
以某種方式訪問BindingExpression;我所做的是將處理程序附加到LostFocus事件,並檢查丟失的焦點是否是DataGridCell內的文本框;如果是這樣,我只是標誌着該綁定爲無效(與t
代表一個TextBox實例):
var x = t.GetBindingExpression(TextBox.TextProperty);
Validation.MarkInvalid(x, new ValidationError(new ExceptionValidationRule(), x.ParentBinding, "error", new Exception("error")));
我必須承認我不知道了每個參數的作用是什麼在ValidationError構造函數(我覺得異常消息是否在驗證工具提示中默認顯示?或者它是錯誤內容?),但我相信你可以弄明白。現在如果你不介意,我想我會休息一下...就像我說的,這不是容易違反流程:)
- 1. WPF綁定控件到DataView
- 2. 直接綁定到DataTable時驗證DataGrid數據 - C#/ WPF
- 3. datagrid頭排序錯誤綁定到dataview
- 4. WPF綁定Dataview不工作
- 5. WPF DataGrid綁定
- 6. WPF Datagrid綁定到xml
- 7. 問題綁定到WPF Datagrid
- 8. WPF綁定和驗證
- 9. WPF:綁定到驗證規則的DependencyProperty
- 10. wpf datagrid當前項目綁定
- 11. 當綁定值爲空時出現WPF datepicker驗證錯誤
- 12. WPF DataGrid - 驗證建議
- 13. WPF Datagrid跨行驗證
- 14. Force DataGrid列驗證(WPF)
- 15. WPF Datagrid RowDetailsTemplate綁定到屬性
- 16. 如何綁定XML到DataGrid - WPF
- 17. 將外鍵綁定到Datagrid(WPF/EF)
- 18. WPF綁定到CellStyle的DataGrid上下文
- 19. WPF Datagrid綁定到列表問題
- 20. 將ViewModel命令綁定到WPF DataGrid
- 21. WPF:將DataGrid列標題綁定到ViewModel
- 22. 綁定WPF DataGrid列到另一個
- 23. MVVM綁定DataGrid(WPF工具包)到DataTable
- 24. 如何綁定到WPF中的DataGrid
- 25. WPF DataGrid綁定到同一行
- 26. 綁定到Uri的WPF DataGrid DataGridHyperlinkColumn
- 27. WPF Datagrid - RowDetails綁定到可選屬性?
- 28. WPF DataGrid綁定到ItemsSource項目屬性
- 29. 綁定到WPF DataGrid的DataTable不更新
- 30. WPF DataGrid綁定到數據表
您看到的例子可能是最好的前進方向;你確定你不想那樣嗎?整體而言,WPF非常適合這種風格,反對它通常更困難。 – 2013-03-12 22:07:06
我不知道將DataView作爲DataGrid的數據源分配是微不足道的,但在這種情況下確實很難執行驗證。 – Conrad 2013-03-12 23:08:01