Hei*_*nzi 5 c# wpf xaml listview datatemplate
我有一个显示一些值的GridView:
<ListView ItemsSource="{Binding MyDataSource}">
<ListView.View>
<GridView>
<GridViewColumn Header="Date1" DisplayMemberBinding="{Binding Date1}" />
<GridViewColumn Header="Date2" DisplayMemberBinding="{Binding Date2}" />
...other Columns, not necessarily containing dates...
</GridView>
</ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)
这很好用.现在我想创建一个以特定方式格式化日期的数据模板:
<DataTemplate x:Key="MySpecialDate">
<TextBlock Text="{Binding StringFormat={}{0:yyyy.MM.dd}}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
CellTemplate只要DisplayMemberBinding指定,添加将不起作用.因此,我必须删除DisplayMemberBinding属性:
<GridViewColumn Header="Date1" CellTemplate="{StaticResource MySpecialDate}" />
<GridViewColumn Header="Date2" CellTemplate="{StaticResource MySpecialDate}" />
Run Code Online (Sandbox Code Playgroud)
这是一个问题:现在DisplayMemberBinding已经不存在了,我如何告诉GridView要显示哪个属性?GridViewColumn没有DataContext财产.
当然,我可以将属性的名称(Date1resp.Date2)放入DataTemplate中,但是我需要为每个属性设置一个模板,这样做会破坏模板的整个目的.
<!-- I don't want that -->
<DataTemplate x:Key="MySpecialDate1">
<TextBlock Text="{Binding Date1, StringFormat={}{0:yyyy.MM.dd}}" />
</DataTemplate>
<DataTemplate x:Key="MySpecialDate2">
<TextBlock Text="{Binding Date2, StringFormat={}{0:yyyy.MM.dd}}" />
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
如果该格式确实被广泛使用,那么您可以使用以下格式
在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}";
}
}
}
Run Code Online (Sandbox Code Playgroud)
XAML code...
<local:DateTimeColumn DisplayMemberBinding="{Binding Date1}" />
Run Code Online (Sandbox Code Playgroud)
(我不喜欢魔术字符串的格式,但可以根据需要修改代码。)
| 归档时间: |
|
| 查看次数: |
1169 次 |
| 最近记录: |