2012-06-19 135 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组件。