动态创建网格

时间:2012-06-19 17:15:56

标签: c# wpf visual-studio-2010 prism-4

我在数据库中有一个表,我需要显示所有行的内容(作为TextBlock),在每个TextBlock的右边我需要显示一个TextBox,以便用户输入一个值(一个数字)当用户提供的值为负时,我需要能够更改任何TextBox的颜色。

有人能给我一个线索吗?

PD:我正在使用WPF和Prism 4以及MVVM模式和VS2010 Ultimate

2 个答案:

答案 0 :(得分:1)

很高兴知道你尝试了什么,这样我们可以更好地帮助你,但你几乎肯定希望将你的数据绑定到DataGrid,或者,如果你绝对需要更多的灵活性(到目前为止)它听起来不是那样的,ItemsControl。您不希望仅动态创建Grid

关于TextBox的问题以及当值为负时如何更改它的颜色实际上是一个单独的问题,如何进行布局。我会查看WPF的Validation组件。

答案 1 :(得分: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}}" />