WPF学习笔记-DataGrid后台动态生成列,设置列样式并使用值转换器

一、后台动态生成DataGrid的列

1 HistoricalDataDG.Columns.Clear();
2 HistoricalDataDG.Columns.Add(new DataGridTextColumn() { Header = "时间", ElementStyle = (System.Windows.Style)FindResource("TbrqStyle"), IsReadOnly = true });
3 HistoricalDataDG.Columns.Add(new DataGridTextColumn() { Header = "T01(℃)", Binding = new Binding("T01"), ElementStyle = (System.Windows.Style)FindResource("dgCell_T01"), IsReadOnly = true});

在后台使用前台xaml里的style  使用FindResource()

二、设置列样式并使用值转换器

前台设置的样式代码

<UserControl.Resources>
        <ResourceDictionary>
<root:DGColorConverter x:Key="DGColorConverter"/>
<Style x:Key="TbrqStyle" TargetType="TextBlock"> <Setter Property="Text" Value="{Binding Path=Tbrq,StringFormat='yyyy-MM-dd HH:mm:ss'}"> </Setter> </Style> <Style x:Key="dgCell_T01" TargetType="TextBlock"> <!-- 文本居中--> <Setter Property="TextAlignment" Value="Center"/> <!-- 根据其他列的值设置文本颜色--> <Setter Property="Foreground"> <Setter.Value> <MultiBinding Converter="{StaticResource DGColorConverter}"> <Binding Path="T01"></Binding> <Binding Path="High_Temperature"></Binding> <Binding Path="Mim_Temperature"></Binding> </MultiBinding> </Setter.Value> </Setter> </Style> </ResourceDictionary> </UserControl.Resources>

TbrqStyle设置时间显示格式为24小时制,在实际使用时发现后台不能设置Binding,否则显示格式无效

值转换器DGColorConverter

 1 public class DGColorConverter : IMultiValueConverter
 2 {
 3         /// 需传入一组对象,(基础值 比对值)
 4         public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 5         {
 6             if (values[0] == DependencyProperty.UnsetValue)
 7             {
 8                 return "";
 9             }
10                 
11             float tvalue = float.Parse(values[0].ToString());
12             float hvalue = float.Parse(values[1].ToString());
13             float mvalue = float.Parse(values[2].ToString());
14             if (tvalue > hvalue || tvalue < mvalue)
15             {
16                 return new SolidColorBrush(Colors.Red);
17             }
18             else
19             {
20                 return new SolidColorBrush(Colors.Black);
21             }
22         }
23 
24         public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
25         {
26             throw new NotImplementedException();
27         }
28 }

通过与其他列的值进行比较,使当前列的文字显示不同颜色

参考

https://www.cnblogs.com/jameslif/archive/2013/07/24/3209955.html

https://www.cnblogs.com/woodenmancool/p/4268539.html?utm_source=tuicool&utm_medium=referral

http://www.cnblogs.com/lingboxingzi/archive/2012/05/09/2491478.html

转载于:https://www.cnblogs.com/gxsxc/p/10132687.html

### 回答1: WPF(Windows Presentation Foundation)是一种用于创建可扩展的Windows桌面应用程序的框架。MVVM(Model-View-ViewModel)是一种用于实现分离用户界面与业务逻辑的模式。DataGridWPF中的一个常用控件,用于显示和编辑表格数据。 在WPF中,使用MVVM模式可以有效地将数据与视图分离。而DataGrid提供了一种简便的方式来显示和编辑表格数据。一个常见的场景是需要在DataGrid中显示动态,即根据一些条件或数据的变化来动态地添加或删除。 要实现DataGrid动态,可以通过绑定DataGrid的ItemsSource属性到一个集合类型的属性,该集合包含了要显示的表格数据。然后通过在ViewModel中动态改变该集合中的属性来添加或删除。例如,可以使用ObservableCollection作为集合类型,该类型会自动通知DataGrid进行更新。 在XAML中,可以使用DataGrid的Columns属性来定义DataGrid。可以通过DataGridTemplateColumn定义一个模板,然后在该模板中绑定到动态数据。例如,可以使用ItemsControl来显示动态数据。 在ViewModel中,可以通过返回一个集合类型的属性来实现动态的添加或删除。当需要添加或删除时,只需要改变该属性的,并通知视图进行更新。 总结来说,要实现WPF MVVM DataGrid动态,可以通过绑定DataGrid的ItemsSource属性到一个包含动态数据的集合属性,然后动态改变该集合属性的来实现动态的添加或删除。在XAML中使用DataGridTemplateColumn来定义模板,并在ViewModel中返回集合属性以实现动态的变化。这样可以有效地实现表格动态调整。 ### 回答2: WPF MVVM(Model-View-ViewModel)是一种设计模式,它将UI(视图)与业务逻辑(模型)分离,通过ViewModel来进行交互和数据绑定。而DataGridWPF中用于显示和编辑数据的控件,它可以绑定到一个集合,并显示其中的数据。现在我们来谈谈如何实现动态DataGrid。 要实现动态DataGrid,我们需要以下几个步骤: 1. 定义数据源:我们需要有一个数据源,它会提供要显示的数据,这个数据可以是一个集合对象,并且集合中的对象需要有属性与名对应。 2. 动态生成:在ViewModel中,我们需要使用ObservableCollection来存储的数据,例如的名称、类型等。可以通过在ViewModel中的构造函数中添加逻辑来添加或删除需要的。这样,在DataGrid使用ItemsSource绑定到ObservableCollection的对象时,DataGrid会根据ObservableCollection的变化来生成动态。 3. 利用DataTemplate生成动态使用AutoGeneratingColumn事件,可以在DataGrid生成时拦截,我们可以在这个事件中使用DataTemplate来自定义生成,例如可以根据的名称或类型来生成不同的样式,也可以调整的宽度等。 4. 利用绑定将数据填充到动态中:通过给DataGrid中的每一添加绑定,可以将数据源中的数据填充到动态中。你可以使用Binding.Path来指定到数据源中的属性,以确保每都显示正确的数据。 总的来说,实现动态DataGrid需要在ViewModel中使用ObservableCollection来存储的数据,利用DataTemplate来生成动态,并使用绑定将数据填充到中。通过配合使用MVVM和DataGrid的相关特性,我们可以轻松实现具有动态DataGrid控件。 ### 回答3: WPF(Windows Presentation Foundation)是一个用于创建Windows应用程序的框架,而MVVM(Model-View-ViewModel)是一种设计模式,用于有效地将UI(用户界面)和业务逻辑分离。在WPF中,DataGrid是一种常用的控件,用于显示和编辑数据。 DataGrid可以根据数据源的结构自动创建,但有时候我们可能需要动态地添加或删除。在MVVM模式下,我们可以使用绑定和命令来实现动态。 首先,我们需要在ViewModel中定义一个集合(ObservableCollection)来绑定DataGrid的ItemsSource属性,这个集合需要包含动态所需的数据。然后,我们可以在XAML中使用DataGrid控件,并将其ItemsSource绑定到ViewModel中定义的集合。 接下来,我们可以使用DataGrid的AutoGeneratingColumn事件来自定义动态生成。通过订阅这个事件,我们可以在生成之前对其进行修改。例如,我们可以根据特定条件动态地给设置样式或添加其他元素。 另外,如果我们需要在运行时添加或删除,我们可以使用DataGrid.Columns属性。我们可以在ViewModel中定义一个命令,并将其绑定到按钮或其他触发动作的控件上。在命令执行时,我们可以通过修改DataGrid.Columns集合来添加或删除。 总结起来,通过结合WPF、MVVM和DataGrid,我们可以实现动态的显示和编辑。使用绑定和命令,我们可以根据需要动态地添加、修改或删除,从而实现灵活的数据展示和用户交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值