2011-10-31 60 views
1

從我的閱讀和嘗試理解和實現MVVM和驗證,我需要一些幫助下面的情況。綁定驗證更新錯誤視圖

查看 - 用戶界面(預期)

模式 - 基於數據表,並通過OnColumnChanging,對列逐列基礎的驗證要求測試(這部分作品沒有問題)

ViewModel - 將連接模型粘貼到視圖上,這也起作用。

對於每個文本框控件,我分別綁定雙向數據表,當前行(仍然沒有問題),並按預期顯示數據。這些標誌包括:NotifyOnTargetUpdated,ValidatesOnDataErrors,ValidatesOnExceptions和NotifyOnValidationError都設置爲true。

如果我使用接口並輸入了無效值,它會正確觸發驗證,並將紅色邊框放在控件上顯示它失敗。

現在的問題。我開始我的表單,然後單擊「添加」按鈕(新記錄,空值),現在啓用了用於編輯內容的文本框控件。點擊「保存」按鈕。我想要刷新所有缺少「必需」數據的控件。由於我的視圖模型綁定到數據表的列,並且從我的閱讀中,所有的驗證都應該在視圖模型中處理,我應該如何調整我的場景。

我不知道如何強制哪些控件綁定到各自的控件時,他們從來沒有收到焦點。另外,從其他閱讀中,爲了允許進行單元測試,您應該能夠在沒有用戶界面的假設下進行測試。因此,理論上,我可以自動創建我的viewmodel,它加載我的數據模型,添加記錄,嘗試保存並強制測試所有「必需」字段。

我關閉嗎???離開?對此不太積極。

回答

0
  1. 驗證應該在兩個地方完成。一個在ModelView(用戶輸入驗證),第二個在Model模型一致性驗證,如果特定情況需要。

  2. 您已將每個文本框(TextProperty)綁定到ModelView的屬性。 TextBox(我假設)有一個依賴屬性,它可以讓你指定以太網來發信號錯誤UI或不。

,你所要做的,恕我直言,immidiately內Add事件處理程序中設置默認值綁定ModelView對象。將會發生的情況是:對於包括所需控制在內的每個控制,將通過DataBinding進行設置,通過UI顯示默認值。對於必填字段,默認值可能不是有效字段,因此所需字段將立即以Error信號出現,向用戶發送有關必填字段的信息。

+0

正如我的問題所述。視圖模型有一個子類數據表的實例,它有其驗證THERE而不是視圖模型本身。文本框綁定到數據表的列...幾乎就像通過視圖模型的一個步驟(即:路徑將從視圖到ViewModel - > MyDataTable - >(Columns)MyDataColumn ...所以沒有直接的INotifyPropertyChange在視圖模型本身...所以我怎麼會從數據表中觸發它不知道它的列是綁定的(即使用反射???) – DRapp

+0

@DRapp:這實際上是第一點,你驗證用戶輸入模型的一面,在我看來,在這種情況下,可以在ModelView方面更容易完成。不是UIError-> ModelViewProperty-> BindedModel-> Validation-> Error-> ModelView-> UI,而是UIError-> ModelView- > Validation->錯誤 - > UI。 – Tigran