2012-06-19 134 views
1

我有一個數據庫中的表,我需要顯示所有行的內容(作爲TextBlock)和每個TextBlock的右側我需要顯示一個TextBox,以便用戶可以輸入一個值一個數字),並且我還需要能夠在用戶提供的值爲負值時更改任何TextBox的顏色。動態創建網格

有人可以給我這個線索嗎?

PD:我使用WPF與棱鏡4和MVVM模式和VS2010最終

回答

1

我不會給你一個完整的解決方案,但我可以指出你在正確的方向。

我首先創建一個數據結構,該數據結構包含NameValue的屬性,併爲屬性更改通知實施INotifyPropertyChanged

接下來在ViewModel(或可能是Model),我將會是一個ObservableCollection<MyDataObject>,並使用來自數據庫的數據填充它。

在XAML,我會用一個ItemsControl結合到集合,並覆蓋ItemTemplate渲染每個項目,可以是水平StackPanelGrid,含有LabelTextBox

對於TextBox.Foreground屬性,我會將它綁定到與TextBox.Text綁定的值相同的值,除了我還會在綁定中使用IValueConverter來檢查值是高於還是低於0,並返回正確的顏色。由於它是一個綁定,只要值發生變化,它就會自動更新。

<TextBox Text="{Binding Value}" 
     Foreground="{Binding Value, Converter={StaticResource MyCustomConverter}}" /> 
+0

謝謝大家我會先用@Rachel的主張嘗試,然後再用Validator進行嘗試。 – Michelle

1

它會是不錯的知道你已經嘗試過什麼,所以我們可以幫助你更好的,但你幾乎可以肯定希望綁定您的數據到DataGrid或者,如果您絕對需要更大的靈活性(到目前爲止聽起來不是這樣),ItemsControl。你不想只是動態地創建一個Grid

您對TextBox的問題以及如何在值爲負值時更改它的顏色實際上是從如何進行佈局的單獨問題。我會研究一下WPF的Validation組件。