1
我尝试在过去的一周左右进行自定义列的WPF数据网格自定义WPF DataGrid列
主要的一点是,有某些类型的数据,我在整个应用中的多个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重做,这似乎是非常多余
同时我尝试做一个datepicker列,但不能找到一个可重复使用的列的任何样品,只是在每个数据网格重新定义再次
非常感谢你
编辑
IM现在尝试一个完全不同的方向
我犯了一个用户控件与下面的标记
<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" />
你怎么都做这些东西? 谢谢!
与感谢。但如果我想添加自定义属性到我的列,我该怎么做?即我想添加一个MinAge属性,我可以设置MinAge =“10”,那么该列将只显示超过10岁的人。我可能还需要一些编码。我无法在一个资源中完成所有工作,我可以吗?谢谢! –
@Yisman这将是一个更好的主意,将过滤器应用到您的DataGrid的ItemSource – Rachel
我的意思是过滤组合框结果 –