我尝试过去一周左右为wpf datagrid制作自定义列
主要的一点是,我在应用程序中的多个数据网格中显示某些类型的数据,我不希望每次都重新声明所有属性
下面是一些反复使用的代码样本
<DataGridComboBoxColumn SelectedValueBinding="{Binding PersonID}" SelectedValuePath="PersonID" DisplayMemberPath="PersonName" Header="Customer" ItemsSource="{Binding Source={StaticResource PersonSource}}" />
所以我尝试制作像这样的用户控件
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" />
你怎么都做这些东西?
谢谢十亿!
答案 0 :(得分:3)
您应该可以在应用程序的资源中创建可重用的DataTemplate
,然后只需添加具有指定DataGridTemplateColumn
的{{1}}
CellTemplate