gpt4 book ai didi

c# - 在多个 GridViewColumns 中使用的通用 DataTemplate

转载 作者:太空狗 更新时间:2023-10-29 23:47:43 25 4
gpt4 key购买 nike

我有一个显示一些值的 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>

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

<DataTemplate x:Key="MySpecialDate">
<TextBlock Text="{Binding StringFormat={}{0:yyyy.MM.dd}}" />
</DataTemplate>

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

<GridViewColumn Header="Date1" CellTemplate="{StaticResource MySpecialDate}" />
<GridViewColumn Header="Date2" CellTemplate="{StaticResource MySpecialDate}" />

问题来了:既然 DisplayMemberBinding 消失了,我该如何告诉 GridView 要显示哪个属性? GridViewColumn 没有 DataContext 属性。

当然,我可以将属性的名称(Date1Date2)放入 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>

最佳答案

与你的问题相关的是我的:Pass multiple resources into a DataTemplate我终于找到了解决方案。我认为您无法绕过每个此类日期的模板定义。但是根据显示模板的复杂性,此解决方案将额外的 DataTemplate 代码保持在最低限度:

<DataTemplate x:Key="DateX">
<ContentPresenter ContentTemplate="{StaticResource MySpecialDate}" local:YourClass.AttachedDate="DateX"/>
</DataTemplate>

这些附加的 DataTemplate 使用附加属性,然后 DataTemplate“MySpecialDate”中的转换器可以使用该属性。附加属性必须在后面的代码中定义。我自己的问题的答案包含一个 complete example .

关于c# - 在多个 GridViewColumns 中使用的通用 DataTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8328443/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com