我在我的申請數據網格和我需要數據網格的某些列具有相同的值的總和爲100。Silverlight的DataGrid列驗證
如:
B 20
C 60的
這個人是右
B 20
Ç62
這個人是不是正確的
有我如何與MVVM廣告INotifyDataErrorInfo實現這個任何想法?
我現在的問題是,如果我只是綁定屬性到單元格,然後拋出ErrorChanged,datagrid會鎖定我我已經改變了數據的行,所以我將無法移動任何地方,除非我恢復原來的價值以便列中的總和再次變爲100。
請不要在CellEdit或類似的東西上發佈各種手動驗證的代碼隱藏解決方案 - 我可以自己編寫這樣的髒代碼。我試圖找到適合綁定和MVVM的乾淨的解決方案
據我看到,雖然 Silverlight的數據網格是完全破碎,未完成,沒人在乎。也許有人適當的DataGrid知道那裏(或者他們實際上在Silverlight 5個固定的嗎?)
現在使用如下:
在我的視圖模型構造
validator = new Validator(this);
validator.AddValidationFor(() => PayElements).When(() => _payElements.Where(p1 => (!String.IsNullOrEmpty(p1.Distribution) && FormatChecker.IsDecimal(p1.Distribution, 3, 2))).Sum(p2 => Decimal.Parse(p2.Distribution)) != 100).Show("ERROR!");
其中PayElements是我的集合(順便說一句,我的壞,它實際上是從_payElements,這是ObservableCollection創建的ICollectionView)。然後OnChanges到任何對象
validator.ValidateAll();
這會導致在構造函數中創建的驗證規則被評估。在這之後,我在整個對象集合的viewmodel的errorCollection中出錯,但它沒有顯示任何紅色邊框。以及在列表中,我可以看到,有一個錯誤,並禁用保存按鈕:)
Silverlight的確有些像解決問題的辦法,只有微軟有/不存在 - 不願意使用Adobe Flash或HTML5! – Coops
什麼是網格?我可以根據您的ViewModel的外觀以及顯示錯誤的位置來想出幾種不同的方法來實現此目的。 – cadrell0
網格綁定到視圖模型中的ObservableCollection。網格本身包含綁定到MyBusinessObject屬性的一堆TempleteColumns。我不介意在錯誤摘要中顯示錯誤,但我更喜歡它在其中驗證屬性的列(或者列中的每個控件) –
noaRAVE