我有一个名为Time的TimeSpan变量,我成功在XAML中进行了绑定(bind)。这是我的代码:

...
<TextBlock Grid.Column="2" Text="{Binding Time, StringFormat='{}{0:hh:mm}'}" />
...

值现在可以正确显示,但是格式仍然是hh:mm:ss。我试图摆脱秒,只显示小时和分钟,但是由于某种原因,我对StringFormat所做的更改未得到考虑,并且我总是得到相同的hh:mm:ss格式。你能给些建议么?

谢谢!

编辑:

从下面的评论来看,我绑定(bind)的时间似乎不是TimeSpan格式,因为StringFormat似乎正确,但是显示的值是错误的。
在自定义类Record中,Time变量的定义如下:
        private TimeSpan time;
        public TimeSpan Time
        {
            get { return time; }
            set { time = value; }
        }

在我的代码中,我定义了一个可观察的集合:
ObservableCollection<Record> records = new ObservableCollection<Record>();

该集合是填充的,然后我有:
listBoxRecords.ItemsSource = this.records;

这是完整的XAML,请记住,正确填写了其余字段,只有TimeSpan给我带来了麻烦:
<ListBox Margin="0,44,0,58" Name="listBoxRecords" ItemsSource="{Binding records}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Margin="4">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="120" />
                            <ColumnDefinition Width="85" />
                            <ColumnDefinition Width="55" />
                        </Grid.ColumnDefinitions>
                        <TextBlock Text="{Binding Date, StringFormat='{}{0:dd-MM-yyyy HH:mm}'}" />
                        <TextBlock Grid.Column="1" Text="{Binding Type }" />
                        <TextBlock Grid.Column="2" Text="{Binding Time, StringFormat='{}{0:hh\\:mm}'}" />
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

最佳答案

您可以使用以下StringFormat获得该输出:

<TextBlock Text="{Binding Time, StringFormat={}{0:hh}:{0:mm}, FallbackValue=00:00}" />

更新>>>

我要说明的第一点是hh将以12小时格式显示小时,如果要使用24小时格式,则应使用HH

我想说的第二点是,您对自己在应用程序中所做的事情显然感到困惑。您看到的带有秒值的时间值不是来自这个TextBlock,也可能不是来自您的那个。我认为您需要仔细阅读自己的代码...您必须具有另一个TextBlock或其他内容。

关于c# - 在XAML中用于绑定(bind)TimeSpan的StringFormat不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20192430/

10-11 07:29