我試圖驗證由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 datagrid rowheader當綁定到dataview
- 2. WPF綁定控件到DataView
- 3. WPF DataGrid驗證/綁定模式錯誤
- 4. 直接綁定到DataTable時驗證DataGrid數據 - C#/ WPF
- 5. datagrid頭排序錯誤綁定到dataview
- 6. WPF綁定Dataview不工作
- 7. WPF綁定DataGrid
- 8. WPF DataGrid綁定
- 9. WPF DataGrid綁定
- 10. WPF Datagrid行驗證
- 11. WPF綁定屬性到Datagrid
- 12. WPF Datagrid綁定到xml
- 13. 問題綁定到WPF Datagrid
- 14. 將WPF DataGrid綁定到DataTable
- 15. 當綁定到DataGridRow.IsSelected屬性時Wpf DataGrid虛擬化問題
- 16. WPF綁定和驗證
- 17. WPF DataGrid - 綁定EditMode
- 18. WPF,XML Datagrid綁定
- 19. WPF:綁定到驗證規則的DependencyProperty
- 20. wpf datagrid當前項目綁定
- 21. WPF DataGrid綁定驗證和投射問題
- 22. 如何在DataGrid中綁定到DataTable時驗證數據?
- 23. 當綁定值爲空時出現WPF datepicker驗證錯誤
- 24. WPF Datagrid跨行驗證
- 25. WPF DataGrid - 驗證建議
- 26. Force DataGrid列驗證(WPF)
- 27. WPF Datagrid的新行驗證
- 28. 如何將c#.net DataView(WPF)綁定到SQLite數據庫?
- 29. DataTrigger基於DataGrid中的單元格的值綁定到DataView
- 30. 綁定DataGrid時堆棧溢出WPF
您看到的例子可能是最好的前進方向;你確定你不想那樣嗎?整體而言,WPF非常適合這種風格,反對它通常更困難。 – 2013-03-12 22:07:06
我不知道將DataView作爲DataGrid的數據源分配是微不足道的,但在這種情況下確實很難執行驗證。 – Conrad 2013-03-12 23:08:01