2014-01-23 38 views
1

我使用不同類型的控件(如文本框,下拉菜單,複選框,單選按鈕等)的窗體。所有這些控件都是在運行時從數據庫動態加載的。有條件地驗證Silverlight中動態生成的控件

我想在條件基礎上對文本框執行驗證。例如,如果我們在下拉菜單中選擇了任何值,則必須在文本框中填寫詳細信息。否則,不需要文本框細節。

我打開使用數據庫來執行此任務,我在我的項目中使用MVVM模式。

任何幫助,這是高度讚賞。

謝謝。

+0

您的ViewModel中是否有任何屬性來表示這些控件中的所選\輸入值? – Fayilt

+0

不,我在ViewModel中沒有選定控件的任何屬性,但是可以從頁面上呈現的所有控件的集合中獲取值。 –

+1

如果你想堅持MVVM的原則,你應該在你的ViewModel中有一些東西代表所有控件的所有值,這樣你就可以根據這些值編寫一些邏輯來禁用\啓用某些控件。你如何加載和實例化它們? – Fayilt

回答

0

(我是以評論的形式開始的,但最終結果太長了)。

從理論上講,您可以訪問ViewModel中的所有這些控件及其值。 不知道你的程序的細節,很難提出任何有用的東西,但實質上你需要從你的ViewModel(可能是布爾值)公開一些更多的屬性,這些屬性將根據控件中的值進行計算。然後,您需要將控件上的IsEnabled屬性綁定到這些新屬性。

聽起來很簡單,但我認爲你會遇到一些架構問題,這些問題很難實現我上面提出的建議。爲了使其工作並在其他控件的內容發生更改時自動更新控件,每次更新其中一個布爾屬性時,ViewModel都需要實現INotifyPropertyChanged並引發PropertyChanged事件。

我想你試圖做的事情可以通過ItemsControl和DataTemplates(也許DataTemplateSelectors)來實現。這將允許你在ViewModel中存儲「數據」(比如List或者更具體的東西),而不需要引用實際的控件,相關的DataTemplates會爲你的ViewModel中的不同數據類型添加正確的控件。