'Converts the mailto uri to a string with just the customer alias
Public Class EmailConverter
Implements IValueConverter
Public Function Convert(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert
If value IsNot Nothing Then
Dim email As String = value.ToString()
Dim index As Integer = email.IndexOf("@")
Dim [alias] As String = email.Substring(7, index - 7)
Return [alias]
Dim email As String = ""
Return email
End If
End Function
Public Function ConvertBack(value As Object, targetType As System.Type, parameter As Object, culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack
Dim email As New Uri(DirectCast(value, String))
Return email
End Function
End Class
控件
DataGrid
提供了一种灵活的方法,用于在行和列中显示数据集合。
DataGrid
包括用于托管自定义内容的内置列类型和模板列。 内置行类型包括一个下拉详细信息部分,可用于在单元格值下方显示其他内容。
绑定到数据
若要将
DataGrid
绑定到数据,请将
ItemsSource
属性设置为
IEnumerable
实现。 数据网格中的每一行都绑定到数据源中的一个对象,数据网格中的每一列都绑定到数据对象的属性。 为了使用户界面在
DataGrid
源数据中添加或删除项时自动更新,
DataGrid
必须将 绑定到实现 接口的
INotifyCollectionChanged
集合,例如
ObservableCollection<T>
。 若要自动反映属性更改,源集合中的对象必须实现
INotifyPropertyChanged
接口。 有关详细信息,请参阅
wpf) (数据绑定
。
默认情况下,控件会在
DataGrid
你设置
ItemsSource
属性时自动生成列。 生成的列的类型取决于列中的数据类型。 下表列出了生成的列类型。
生成的列类型
下图显示了每个列类型。
自动生成列时,可以处理 事件以
AutoGeneratingColumn
在将列添加到
DataGrid
之前自定义或取消列。 如果将用户定义的列和自动生成的列同时添加到 ,
DataGrid
则首先添加用户定义的列。 若要重新排列列的显示顺序,可以设置
DisplayIndex
单个列的 属性。
可以通过将 属性设置为
AutoGenerateColumns
false
来阻止自动列生成。 如果要显式创建和配置所有列,这非常有用。
DataGridTemplateColumn
如果内置列类型不能满足你的需求,请使用 类型来定义自定义列。 类型
DataGridTemplateColumn
提供
CellTemplate
和
CellEditingTemplate
属性,使你可以为显示模式和编辑模式指定内容模板。 例如,可以为日期定义自定义列。 可以
CellTemplate
定义
TextBlock
以显示日期,而
CellEditingTemplate
可以定义用于
DatePicker
编辑日期的控件。
可以使用
Columns
集合在运行时以编程方式添加、插入、删除和更改控件中的任何列。
IsAutoGenerated
检查 属性以确定列是自动生成的还是用户定义的。 更改时,将自动添加、删除或重新生成自动生成的
ItemsSource
列。
默认情况下,当用户单击 中的
DataGrid
单元格时,将选择整行,用户可以选择多行。 可以设置 属性以
SelectionUnit
指定用户是否可以选择单元格和/或整行。
SelectionMode
设置 属性以指定是可以选择多个行或单元格,还是只能选择单个行或单元格。
可以获取有关从
SelectedCells
属性中选择的单元格的信息。 可以获取有关在 事件的 中
SelectedCellsChangedEventArgs
SelectedCellsChanged
更改了其选择的单元格的信息。
SelectAllCells
调用 或
UnselectAllCells
方法以编程方式选择或取消选择所有单元格。 有关详细信息,请参阅
DataGrid 控件中的默认键盘和鼠标行为
。
分组、排序和筛选
默认情况下,可以通过单击列标题对 中的
DataGrid
项进行排序。 可以通过处理 事件来
Sorting
自定义排序。 若要取消默认排序,请将
Handled
属性设置为
true
。 还可以先对源数据进行排序,然后再将其显示在 中
DataGrid
。
若要对 中的数据
DataGrid
进行分组、排序和筛选,请将 绑定到
DataGrid
支持这些操作的
ICollectionView
实现。 然后,对集合视图执行操作。 在
DataGrid
中对项进行分组后,可以定义一个
GroupStyle
来指定每个组的外观。 通过将 它添加到 的 集合来
GroupStyle
DataGrid
应用
GroupStyle
。 如果你有多个级别的分组,则可以对每个级别的组应用不同的样式。 样式按照定义顺序应用。 有关详细信息,请参阅
如何:在 DataGrid 控件中对数据进行分组、排序和筛选
。
默认情况下,可以直接在 中
DataGrid
编辑项。 若要保证可以正确提交和取消编辑,中的
DataGrid
对象必须实现
IEditableObject
接口。 或者,可以将 属性设置为
IsReadOnly
true
以在 中
DataGrid
禁用编辑。
DataGrid
具有对以下编辑命令的内置支持:
Command
默认输入绑定
通过单击或按 F2 将当前单元格置于编辑模式。 移动到同一行中的另一个单元格时,或在单元格处于编辑模式时按 Enter,将提交单元格级编辑。 当移动到另一行或在行处于编辑模式时按 Enter 时,将提交行中的所有编辑。 按 ESC 一次可取消单元格编辑,按 ESC 两次可取消行中的所有编辑。 有关以编程方式提交和取消编辑的详细信息,请参阅
BeginEdit
、
CommitEdit
和
CancelEdit
方法。 有关编辑相关事件的详细信息,请参阅
BeginningEdit
、
PreparingCellForEdit
、
CellEditEnding
和
RowEditEnding
。
CanUserAddRows
设置 和
CanUserDeleteRows
属性以指定用户是否可以添加或删除行。 用户可以通过按 DELETE 键删除所选行。 如果 属性
CanUserAddRows
设置为
true
,则会添加新项行作为 中的
DataGrid
最后一行。 可以通过处理 事件来设置新项的
InitializingNewItem
默认值。
是否允许编辑操作受各种其他因素(包括
IsReadOnly
和
IsEnabled
状态
DataGrid
)以及基础数据收集是否允许该操作的影响。
DataGrid
使你能够在单元格和行级别执行验证。 通过单元格级别验证,可以在用户更新值时验证绑定数据对象的单个属性。 通过行级别验证,可以在用户提交对行的更改时验证整个数据对象。 可以通过设置
RowValidationErrorTemplate
属性为行级验证错误提供自定义视觉反馈,也可以使用默认错误指示器。 若要创建自定义验证规则,请创建派生自 类的
ValidationRule
类并实现
Validate
方法。 将自定义验证规则添加到集合。
RowValidationRules
自定义 DataGrid 控件
控件
DataGrid
支持常见的表格格式设置选项,例如交替行背景,以及显示或隐藏标题、网格线和滚动条的功能。 此外,控件提供了多个样式和模板属性,可用于完全更改控件及其行、列、标题和单元格的外观。
若要自定义
DataGrid
行为,可以处理选择更改、单元格编辑和列重新排序的事件。 还
DataGrid
公开了多个行回收事件,你可以处理这些事件来自定义行。
若要将相同的属性设置应用于多个
DataGrid
控件,请使用
Style
属性。 可以修改默认
ControlTemplate
以赋予控件独特的外观。 有关创建 的详细信息,
ControlTemplate
请参阅
通过创建 ControlTemplate 自定义现有控件的外观
。 若要查看特定于
DataGrid
的部分和状态,请参阅
DataGrid 样式和模板
。
此控件的依赖属性可能由控件的默认样式设置。 如果属性由默认样式设置,则当控件出现在应用程序中时,该属性可能会从其默认值更改。 默认样式由应用程序运行时使用的桌面主题决定。
只有视觉对象属性已存在于控件的默认模板中并且已使用
TemplateBinding
设置时,设置该属性才有效。 在
通过创建 ControlTemplate 自定义现有控件的外观
一文的
更改控件的视觉结构
部分可以找到视觉属性列表。
下表提供了有关通常与
DataGrid
关联的任务的信息。
设置交替行背景色
将
AlternationIndex
属性设置为 2 或更多,然后将
Brush
分配给
RowBackground
和
AlternatingRowBackground
属性。
定义单元格和行选择行为
设置
SelectionMode
和
SelectionUnit
属性。
自定义标题、单元格和行的视觉外观
将新的
Style
应用于
ColumnHeaderStyle
、
RowHeaderStyle
、
CellStyle
或
RowStyle
属性。
设置调整大小选项
设置
Height
、
MaxHeight
、
MinHeight
、
Width
、
MaxWidth
或
MinWidth
属性。 有关详细信息,请参阅
DataGrid 控件中的调整大小选项
。
访问所选项
检查 属性
SelectedCells
以获取所选单元格,并检查
SelectedItems
属性以获取所选行。 有关更多信息,请参见
SelectedCells
属性。
自定义最终用户交互
设置
CanUserAddRows
、
CanUserDeleteRows
、
CanUserReorderColumns
、
CanUserResizeColumns
、
CanUserResizeRows
和
CanUserSortColumns
属性。
取消或更改自动生成的列
处理
AutoGeneratingColumn
事件。
将
FrozenColumnCount
属性设置为 1,并通过将
DisplayIndex
属性设置为 0 将列移动到最左边的位置。
使用 XML 数据作为数据源
将
ItemsSource
上的
DataGrid
绑定到表示项集合的 XPath 查询。 在
DataGrid
中创建每一列。 通过将绑定上的 XPath 设置为获取项源属性的查询来绑定每一列。 有关示例,请参见
DataGridTextColumn
。
绑定到
CollectionView
支持分组的 或
CollectionViewSource
。 有关详细信息,请参阅
如何:在 DataGrid 控件中对数据进行分组、排序和筛选
。
显示行的详细信息部分
定义 以
RowDetailsTemplate
指定详细信息部分的外观。 设置 以
RowDetailsVisibilityMode
指定何时显示详细信息部分。 有关详细信息,请参阅
如何:向 DataGrid 控件添加行详细信息
。
为指定的路由事件添加路由事件处理程序,并将该处理程序添加到当前元素的处理程序集合中。 将
handledEventsToo
指定为
true
,可为已标记为由事件路由中的其他元素处理的路由事件调用所提供的处理程序。
(继承自
UIElement
)
定位子元素,并确定
UIElement
的大小。 父元素从它们的
ArrangeCore(Rect)
实现(或者是 WPF 框架级别等效项)调用此方法,以便形成递归布局更新。 此方法产生第二次布局更新。
(继承自
UIElement
)
对指定依赖属性的值进行强制。 通过对调用方
DependencyObject
上存在的依赖属性的属性元数据中所指定的任何
CoerceValueCallback
函数进行调用来完成此操作。
(继承自
DependencyObject
)
更新
UIElement
的
DesiredSize
。 父元素从其自身的
MeasureCore(Size)
实现调用此方法以形成递归布局更新。 调用此方法构成布局更新的第一个处理过程(“测量”处理过程)。
(继承自
UIElement
)
每当更新此
FrameworkElement
的任何依赖属性的有效值时调用。 将在自变量参数中报告已更改的特定依赖属性。 重写
OnPropertyChanged(DependencyPropertyChangedEventArgs)
。
(继承自
FrameworkElement
)
支持
FrameworkElement
的专用子类中的增量布局实现。 如果子元素包含无效属性,且该属性在元数据中标记为影响布局过程中父元素的测量或排列过程的因素,则调用
ParentLayoutInvalidated(UIElement)
。
(继承自
FrameworkElement
)