StringFormat pour la liaison de Temps en XAML ne fonctionne pas
J'ai un laps de Temps variable appelée Temps qui j'ai réussi à lier dans le code XAML. Voici le code que j'ai:
...
<TextBlock Grid.Column="2" Text="{Binding Time, StringFormat='{}{0:hh:mm}'}" />
...
Les valeurs sont désormais affichés correctement, cependant, le format est encore hh:mm:ss. Je suis en train d'essayer de se débarrasser de l'secondes et d'afficher uniquement les heures et les minutes, mais pour une raison quelconque, les modifications que j'ai faites à la StringFormat ne sont pas pris en compte et je reçois toujours le même hh:mm:ss. Pouvez-vous me conseiller?
Merci!
EDIT:
À en juger par les commentaires ci-dessous, il semble que le Temps que j'ai appliqué n'est pas dans la plage de Temps format que le StringFormat semble être correct, mais la valeur affichée est incorrecte.
La variable de Temps est défini comme suit dans une classe personnalisée d'Enregistrement:
private TimeSpan time;
public TimeSpan Time
{
get { return time; }
set { time = value; }
}
Dans mon code j'ai une collection observable définis:
ObservableCollection<Record> records = new ObservableCollection<Record>();
La collection est peuplée, puis j'ai:
listBoxRecords.ItemsSource = this.records;
Voici la pleine XAML, en gardant à l'esprit que le reste de la les champs sont correctement remplis, seul le Temps me donne des problèmes:
<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>
- Si votre problème a été résolu, veuillez accepter une réponse comme il est de coutume sur ce site.
- Le problème n'a pas encore été résolu ou j'aurais volontiers accepté de répondre.
- Et lorsque vous essayez ma réponse, ce qui se passe (en gardant à l'esprit mon commentaire que ce que vous avez vu n'était pas venue de mon
StringFormat
)? Essayez-la dans un nouveau projet et vous verrez qu'elle fonctionne très bien. - stackoverflow.com/questions/4563081/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir la sortie en utilisant ce
StringFormat
:Mise à JOUR >>>
Le premier point que je voudrais faire est que
hh
affichera des heures dans un format 12 heures et vous devez l'utiliserHH
si vous voulez en format 24 heures.Le deuxième point que je voudrais faire, c'est que vous êtes clairement confus quant à ce que vous faites dans votre application. La valeur de temps que vous êtes à voir avec la valeur des secondes est ne vient pas de ce
TextBlock
et probablement ne vient pas de votre une ou l'autre. Je pense que vous avez besoin de prendre un bon coup d'oeil à ton code... vous doit avoir un autreTextBlock
ou quelque chose.StringFormat
avec un autre... par exemple, il n'existe pas de secondes dans ceStringFormat
, donc il va jamais afficher les secondes comme votre exemple, votre commentaire. Dans mon application, il affiche exactement comme prévu.StringFormat
dans les deux .NET 3.5 et .NET 3.5 Client Profile et il fonctionne exactement comme prévu. Essayez à nouveau de vous dans un nouveau Projet et vous allez voir que c'est exactement ce qu'il indique sur l'étain'.<TextBlock Text="{Binding MyTimeSpanProperty, StringFormat='{}{0:hh\\:mm\\:ss}'}"/>
Essayer de s'échapper
:
en changeant votreStringFormat
à quelque chose comme:TimeSpan
bien et il a bien fonctionné, mais ce qui est vraiment étrange, c'est que, dans votre cas, dites-vous, il ignoreStringFormat
tous ensemble et montre le format par défaut alors que dans mon cas, votre code n'a rien révélé. Êtes-vous sûr à 100% que vous liez àTimeSpan Time {...}
de la propriété que vous pensez que vous liez.MyClass
, principalement commentTime
propriété est définie? À en juger par votre commentaire sur l'autre réponse, il semble queStringFormat
est ignoré car il n'est pasTimeSpan
. En plus de défautTimeSpan
format seraithh:mm:ss.fffffff
et vous êtes absent milisecondes partie.fffffff
est effectivement en option et peuvent ne pas être inclus si vous avez plein de secondes, de sorte que vous obtenez peut-être bien le format par défaut pourTimeSpan
Aucune des réponses proposées travaillé pour moi, ils ont tous produit des erreurs de liaison.
J'ai fini par faire un exemple d'application à tester tous les format de chaîne trouvé sur MSDN: Personnalisé TimeSpan Chaînes de Format
J'ai trouvé à partir de ce test que seule la plage de Temps, les parties qui commencent avec
%
(comme%d
depuis quelques Jours travaillé dans WPFStringFormat
propriété.Essayer cela, il a travaillé pour moi:
Pour ceux qui s'intéressent à une approche programmatique, cela a fonctionné pour moi:
de .Net 4 pour la plage de temps, vous pouvez utiliser
comme pour tim-lloyd réponse dans
Comment formater de Temps en XAML
Marquer comme réponse si cela a fonctionné.
Ce qui concerne
Cherché sur de nombreux sujets avec ce problème, j'ai trouvé que:
À compter du 4 juillet 2019 cela fonctionne pour moi, dans le code XAML de Xamarin forms:
Text="{Binding myTimeSpan, StringFormat=\{0:h\\:mm\\:ss\}, FallbackValue=00:00:00}
Il affiche l'heure en heures, minutes, secondes:
1 heure et 23 minutes et 9 secondes = 1:23:09