Generic DataTemplate用于多个GridViewColumns

我有一个显示一些值的GridView:

     ...other Columns, not necessarily containing dates...    

这很好用。 现在我想创建一个以特定方式格式化日期的数据模板:

    

只要指定了DisplayMemberBinding添加CellTemplate将不起作用。 因此,我必须删除DisplayMemberBinding属性:

   

这是一个问题 :现在DisplayMemberBinding已经消失了,我如何告诉GridView要显示哪个属性? GridViewColumn没有DataContext属性。

当然,我可以将属性的名称( Date1 Date2 )放入DataTemplate中,但是我需要为每个属性设置一个模板,这样做会Date2模板的全部目的。

        

与您的问题相关的是我的:将多个资源传递到DataTemplate ,我终于找到了解决方案。 我认为你不能为每个这样的日期解决模板的定义。 但是,根据显示模板的复杂性,此解决方案将额外的DataTemplate代码保持在最低限度:

    

这些额外的DataTemplate使用附加属性,然后可以由DataTemplate “MySpecialDate”中的转换器使用。 必须在后面的代码中定义附加属性。 我自己的问题的答案包含一个完整的例子 。

如果格式真的被广泛使用,那么您可以使用以下内容

DateTimeColumn.cs

 public class DateTimeColumn : GridViewColumn { protected override void OnPropertyChanged(PropertyChangedEventArgs e) { base.OnPropertyChanged(e); if (Equals(e.PropertyName, "DisplayMemberBinding") && DisplayMemberBinding != null) { DisplayMemberBinding.StringFormat = "{0:yyyy.MM.dd}"; } } } 

XAML code...

  

(我不喜欢格式为魔术字符串,但可以根据需要修改代码。)