需要在DataGrid中展示不同Model的数据,可以将DataGrid的AutoGenerateColumns属性设置为"True",让列自动生成即可,但是列名字就会默认为属性名字,给用户看不合适,则可以通过对属性添加Description来保存列名字。
1.对Model属性增加Description
需要展示的写Description,不需要的就不写,在下面会通过是否有Description来控制在DataGrid是否展示。
public class DataModel
[Description("序号")]
public int Index { get; set; }
[Description("名字")]
public string name { get; set; }
public string comment{ get; set; }
2.在ViewModel中增加DataGrid绑定的数据对象
public class DataViewModel
private ObservableCollection<object> items = new ObservableCollection<object>();
public ObservableCollection<object> Items
get { return items ; }
set { items = value; }
3.在XAML中增加DataGrid
DataGrid有一个fileList_AutoGeneratingColumn事件,在生成Column会触发这个事件,然后通过判断属性的Description是否有值来控制是否显示。
<DataGrid x:Name="fileList" SelectionMode="Extended" AutoGenerateColumns="True"
AutoGeneratingColumn="fileList_AutoGeneratingColumn"
ScrollViewer.HorizontalScrollBarVisibility="Auto" VerticalAlignment="Stretch"
ItemsSource="{Binding Items}">
private void fileList_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
if (string.IsNullOrEmpty((e.PropertyDescriptor as System.ComponentModel.PropertyDescriptor).Description))
e.Column.Visibility = Visibility.Collapsed;
e.Column.Header = Strings.GetString((e.PropertyDescriptor as System.ComponentModel.PropertyDescriptor).Description);
4.增加数据
对ViewModel中的Items增加数据,则前台可以显示出数据。
5.切换不同数据类型
切换不同数据类型的时候DataGrid并不会自动删除列,所以需要手动删除之前的数据,并且重置一下AutoGenerateColumns 属性,我是增加了一个Combox类控制数据来源,当Combox切换时触发删除DataGrid数据。
<ComboBox ItemsSource="{Binding EventTypeEnumItems}"
SelectionChanged="ComboBox_SelectionChanged"
SelectedValue="{Binding EventType,Mode=TwoWay}" Width="245"/>
private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
this.fileList.Columns.Clear();
this.DataViewModel.Items.Clear();
this.fileList.AutoGenerateColumns = false;
this.fileList.AutoGenerateColumns = true;
在项目开发的过程,通常会遇到一些表格数据的绑定,因为没有WPF的开发经验所以一边摸索一边开发,所幸WPF的上手难度不大,开发过程较为顺利。不过在使用DataGrid的时候还是遇到了一点阻绊遇。所以在这里讲一下这个DataGrid应该怎么用,以及要注意的事情。DataGrid是个非常实用的控件,可以用来展示及获取较为复杂的数据结构。1、在资源视图xml文件中添加DataGrid,并设置绑定,如下。在初始化代码中设置DataGrid绑定到的对象。
<DataGrid x:Name="dataGrid" Margin="0,52,0,65" AutoGenerateColumns="False" LoadingRow="dataGrid_LoadingRow"...
WPF 动态列(DataGridTemplateColumn) 绑定数据 (自定义控件)
上面的使用动态对象加载的数据 发现一个问题 一个是卡 二是 对象数量得写死 很不开心
最后使用对象方式 也应该使用对象方式
因为业务需要 我的datagird 数据来源于俩个对象 列头是一个,行和行内容是一个 不好的点是列行的数据匹配 不好掌控 因为业务问题 数据库设计问题 后期再修改成一个...
田字格和上面Textbox 属于一个自定义控件 大致功能是获得一个字符串 和一组颜色值 最后田字格会显示不同颜色
这篇主要讲 DataGridTemplateColumn 并实现重写Datatemplate
重点注释 单独列出来了
LS 是列数据对象集合
listName是行数据对象集合
var Item = n...
前期了解到了怎么制作了一个简单的表格,那现在在练习项目中去实践一下,目前需要对DataGrid表格进行数据绑定的,在进行数据绑定得先连接到自己本地数据库的表。
设置自己需要的表格样式,需要的数据信息
<DataGridx:Name="dgAccountManage"IsReadOnly="True"AutoGene...
上面的DataGrid多选选中的项能实时体现到下面的DataGrid,并且点击按钮能选中上面成绩>85的学生,下面的DataGrid也能修改,在不用后置代码也就是不获取DataGrid这个对象的方式完成,那么我就想到用SelectedItems双向绑定了,那么我们现在就来完成它。SelectedItems并不是依赖属性,所以按道理来说我们是不能对其进行绑定的,那么我们只能自己定义依赖属性或者附加属性来实现,这边我是用的附加属性来实现的。我们需要在Model中加一个是否选中的属性。
不变, 随机, 波动
}前台代码<Window.Resources>
<ObjectDataProvider x:Key="myEnum" MethodName="GetValues" ObjectType="{x:Type core:Enum}">
<ObjectDataPr
有前面修改按钮样式的基础,我们可以尝试来定制一个即好看又好用的 ListBox ,今天先来讲“好看”部分。文章来源博客园斯克迪亚。 打开 Microsoft Visual Studio 2008 ,建立一个WPF应用程序,调整窗体大小,在窗体内创建一个 ListBox 和一个 Button ,按下图所示布局。在 Window1.xaml 中为窗体 Loaded 事件及按钮 Click 事件添加事...