如果时间为00:00,如何在Listview的Datetime中隐藏时间

时间:2018-09-23 10:58:04

标签: c# wpf datetime data-binding string-formatting

简单的情况。我有一个ItemsSource="{Binding MyModelsList}"的列表视图。 MyModelsList是MyModel元素的列表:

public MyViewModel() {
    ...
    _myModelsList = // method that gets items from db
}

private ObservableCollection<MyModel> _myModelsList;
public ObservableCollection<MyModel> MyModelsList
{
    // get.. set..
}

...并且MyModel包含一些名为MyDate的Datetime字段。当我以默认方式声明MyDate时...

<ListView ItemsSource="{Binding MyModelsList}">
    <...>
        <Label Content="{Binding MyDate}" />   
    </...>
</ListView>

...实现此结果:

  • 时间为00:00-> 9.23.2018
  • 时间不同时-> 9.23.2018 11:00 AM

我想达到同样的目的,但是没有任何时间。 XAML中可能吗?我尝试使用其他ContentStringFormat,但结果始终包含00:00。

我知道在ViewModel中分别声明MyDate字段时该怎么办,但是在ViewModel中只有MyList声明并将其绑定到Listview时怎么办?

1 个答案:

答案 0 :(得分:0)

您尝试过

Content="{Binding MyDate, StringFormat=T}". 

有关DateTime的StringFormat的所有可能值,请参考此文档页面。

如果您仍想隐藏00:00时的时间,可以使用这样的触发器

                <Label>
                    <Label.Style>
                        <Style TargetType="{x:Type Label}">
                            <Setter Property="Content" Value="{Binding MyDate, StringFormat=T}"/>
                            <Style.Triggers>
                                <MultiDataTrigger>
                                    <MultiDataTrigger.Conditions>
                                        <Condition Binding="{Binding MyDate.Hour}" Value="0" />
                                        <Condition Binding="{Binding MyDate.Minute}" Value="0" />
                                        <Condition Binding="{Binding MyDate.Second}" Value="0" />
                                    </MultiDataTrigger.Conditions>
                                    <Setter Property="Content" Value=""/>
                                </MultiDataTrigger>
                            </Style.Triggers>

                        </Style>
                    </Label.Style>
                </Label>