[英]Custom WPF DataGrid Column
我试着在过去一周左右为wpf数据网格制作自定义列
要点是,我在整个应用程序的多个数据网格中显示某些类型的数据,并且我不想每次都重新声明所有属性
下面是一些反复使用的代码示例
<DataGridComboBoxColumn SelectedValueBinding="{Binding PersonID}" SelectedValuePath="PersonID" DisplayMemberPath="PersonName" Header="Customer" ItemsSource="{Binding Source={StaticResource PersonSource}}" />
所以我试着像这样做一个usercontrol
Public Class PersonColumn
Inherits DataGridComboBoxColumn
Sub New()
SelectedValuePath = "PersonID"
DisplayMemberPath = "PersonName"
Header = "Customer"
End Sub
End Class
这是一个帮助,但不完整,因为
FindResource
命令来获取PersonSource 怎么能改善? 我的所有搜索都反复显示xaml redone,这似乎非常多余
同时我试图建立一个datepicker列,但无法找到任何可重用列的样本,只需再次在每个数据网格中重新定义
非常感谢你
编辑
我现在尝试一个完全不同的方向
我使用以下标记进行了用户控制
<DataGridTemplateColumn Header="Date" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:my="clr-namespace:SampleWpf" x:Class="DateColumn">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DateColumn}}, Path=Value}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<DatePicker SelectedDate="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DateColumn}}, Path=Value}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
还有一些代码隐藏
Public Class DateColumn
Inherits DataGridTemplateColumn
Public Shared ReadOnly ValueProperty = DependencyProperty.Register("Value", GetType(Date?), GetType(DateColumn))
Property Value As Date?
End Class
但这不起作用。 日期未显示在列中,我的更改也未保存回数据源
datagrid xaml很简单
<my:DateColumn Value="{Binding Path=ReceivedOn}" Header="ReceivedOn" />
你们都是怎么做这些东西的? 谢谢十亿!
您应该能够在Application的Resources中创建可重用的DataTemplate
,然后只需使用指定的CellTemplate
添加DataGridTemplateColumn
<DataGridTemplateColumn CellTemplate="{DynamicResource CustomColumnTemplate}" />
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.