我在数据库中有一个表,我需要显示所有行的内容(作为TextBlock),在每个TextBlock的右边我需要显示一个TextBox,以便用户输入一个值(一个数字)当用户提供的值为负时,我需要能够更改任何TextBox的颜色。
有人能给我一个线索吗?
PD:我正在使用WPF和Prism 4以及MVVM模式和VS2010 Ultimate答案 0 :(得分:1)
很高兴知道你尝试了什么,这样我们可以更好地帮助你,但你几乎肯定希望将你的数据绑定到DataGrid
,或者,如果你绝对需要更多的灵活性(到目前为止)它听起来不是那样的,ItemsControl
。您不希望仅动态创建Grid
。
关于TextBox的问题以及当值为负时如何更改它的颜色实际上是一个单独的问题,如何进行布局。我会查看WPF的Validation
组件。
答案 1 :(得分:1)
我不会给你一个完整的解决方案,但我可以指出你正确的方向。
首先创建一个包含Name
和Value
属性的数据结构,并为属性更改通知实现INotifyPropertyChanged。
接下来在ViewModel
(或可能Model
)中,我会创建一个ObservableCollection<MyDataObject>
,并使用数据库中的数据填充它。
在XAML中,我会使用绑定到集合的ItemsControl,并覆盖ItemTemplate
以将每个项目渲染为水平StackPanel
或Grid
,包含Label
和TextBox
对于TextBox.Foreground
属性,我会将它绑定到TextBox.Text
绑定的相同值,除了我还在绑定中使用IValueConverter来检查是否该值大于或小于0,并返回正确的颜色。由于它是绑定,因此只要值发生变化,它就会自动更新。
<TextBox Text="{Binding Value}"
Foreground="{Binding Value, Converter={StaticResource MyCustomConverter}}" />